Nancy / TinyIoC用于单一界面的多个具体类

时间:2014-11-12 19:25:38

标签: nancy

我们为不同的模块提供了两种身份验证方法 - UserAuthModuleServiceAuthModule。我们创建了两个模块派生自的基类。我们已将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模块中没有容器访问权。

1 个答案:

答案 0 :(得分:1)

为IAuthProvider创建一个独特的界面是不可能的?

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

然后注册:

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

然后修改构造函数:

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