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