【问题标题】:Nancy/TinyIoC multiple concrete classes for single interfaceNancy/TinyIoC 单个接口的多个具体类
【发布时间】:2015-01-09 18:34:34
【问题描述】:

对于不同的模块,我们有两种身份验证方法——UserAuthModuleServiceAuthModule。我们创建了 2 个模块派生自的基类。我们已将 AuthProviders 连接到 IAuthProvider。然后我们在构造函数中有一个依赖项,应该注入正确的 AuthProvider。然而,我们无法找到告诉 Nancy/TinyIoC 使用哪个具体类的方法。伪代码如下:

abstract class UserAuthModule : NancyModule
{
  public UserAuthModule(IAuthProvider authProvider) // should get the UserAuthProvider concrete class
}

abstract class ServiceAuthModule : NancyModule
{
  public ServiceAuthModule(IAuthProvider authProvider) // should get the ServiceAuthProvider concrete class
}

这是一个具体模块的类声明示例:

public class AccountModule : UserAuthModule

然后我们陷入困境:我们如何为 IAuthProvider 接口注册 2 个具体类?我们可以命名它们,但不知道 Nancy 在进行构造函数注入时如何知道要注入哪个类。

在我们的引导程序中,我们有:

Container.Register<IAuthProvider, UserAuthProvider>(“UserAuth”);
Container.Register<IAuthProvider, ServiceAuthProvider>(“ServiceAuth”);

我们可以从容器中解析类型,但在 Nancy 模块中没有容器访问权限。

【问题讨论】:

    标签: nancy


    【解决方案1】:

    是否不可能为每个基于 IAuthProvider 的接口创建一个独特的接口?

    interface IUserAuthProvider : IAuthProvider { }
    interface IServiceAuthProvider : IAuthProvider { }
    

    然后注册:

    Container.Register<IUserAuthProvider, UserAuthProvider>();
    Container.Register<IServiceAuthProvider, ServiceAuthProvider>();
    

    然后修改构造函数:

    public UserAuthModule(IUserAuthProvider authProvider)
    public ServiceAuthModule(IServiceAuthProvider authProvider)
    

    【讨论】:

    • 你让生活变得如此简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多