自定义 CredentialsAuthProvider 中的 ServiceStack 访问 Ioc 容器

标签 servicestack funq

我扩展了 service-stack 提供的 CredentialsAuthProvider 以允许我针对 Active-Directory 实例进行身份验证。 AD 访问逻辑封装在一个名为 AdManager 的自定义类中(见下文) 例如:

public class AdCredentialsAuthProvider : CredentialsAuthProvider
{
    public override bool TryAuthenticate(IServiceBase authService, 
                                            string userName, 
                                            string password)
    {
        IAdManager manager = new AdManager();
        return manager.Authenticate(userName, password);
    }
    ...

问题:

  • 我希望我可以在我的扩展“AppHostBase”中使用服务堆栈内置 IoC“Funq.Container”注册 AdManager,并从我的自定义 CredentialsAuthProvider 中访问它?我尝试注册它,但没有找到通过内置框架的服务堆栈访问 IoC(或我注册的 AdManager 对象)的方法。

我错过了什么吗? 谢谢

最佳答案

您可以使用提供的 IServiceBase 从 AuthProvider 中访问 IOC,例如:

var addManager = authService.TryResolve<IAdManager>();

在其他任何地方,您始终可以使用 Singleton 解决依赖关系:

var addManager = HostContext.TryResolve<IAdManager>();

否则,如果您知道它位于 ASP.NET Web 主机中,您也可以通过 AppHost 单例访问它:

var addManager = AppHostBase.Instance.Resolve<IAdManager>();

关于自定义 CredentialsAuthProvider 中的 ServiceStack 访问 Ioc 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959134/

相关文章:

licensing - 如何停止 ServiceStack 3.9.71 NuGet 包安装 ServiceStack.Text 4.0.24?

c# - ServiceStack Funq.Container 中相同接口(interface)的多个实现

dependency-injection - ServiceStack 中的 Funq 用法

c# - 在DTO和域对象之间进行映射时,如何使该过程对我的存储库透明?

asp.net-mvc - 使用 ServiceStack MVC Powerpack + Funq 进行构造函数注入(inject)

dependency-injection - 带有 funq 的 servicestack - 按照惯例 Autowiring

redis - 不存在 key 的 ServiceStack Redis 客户端行为

c# - 服务堆栈在过滤器中杀死一个 HTTP 请求

redis - The previous queued operation has not been committed 错误在 ServiceStack Redis 客户端