ServiceStack访问Custom CredentialsAuthProvider中的Ioc容器

时间:2013-04-11 21:25:11

标签: servicestack funq

我扩展了服务堆栈提供的CredentialsAuthProvider,以允许我对Active-Directory实例进行身份验证。 AD访问逻辑封装在名为 AdManager 的自定义类中(见下文) e.g:

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对象)的方法。

我错过了什么吗? 谢谢

2 个答案:

答案 0 :(得分:7)

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

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

您可以随时使用Singleton解决依赖关系:

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

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

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

答案 1 :(得分:1)

Service Stack也使用属性注入。我在扩展Service栈提供的Service类时使用了属性注入。

public class MyService : Service
{
        public MyService(IDb db)  
        {
           //db constructor inject
        }

        public IValidator<MyData> MyDataValidator { get; set; }

        public object Get(MyData request)
        {
           //MyDataValidator is property injected
        }
}

我相信相同的逻辑可以应用于AuthProvider。但我没有测试过它。