【问题标题】:ServiceStack Access Ioc container within Custom CredentialsAuthProvider自定义 CredentialsAuthProvider 中的 ServiceStack 访问 Ioc 容器
【发布时间】:2013-04-11 21:25:10
【问题描述】:

我扩展了 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 对象)的方法。

我错过了什么吗? 谢谢

【问题讨论】:

    标签: servicestack funq


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 感谢 Mythz.... 很棒的 AP​​I,你们....无法形容我有多喜欢使用像服务堆栈这样干净且经过深思熟虑的框架...跨度>
    【解决方案2】:

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

    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。但是我没有测试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多