我需要在使用 IOC Simple Injector 的项目中添加成员(member)重启(RavenDb)
注入(inject)实现
var config = MembershipRebootConfig.Create();
kernel.Bind<MembershipRebootConfiguration<HierarchicalUserAccount>>().ToConstant(config);
kernel.Bind<UserAccountService<HierarchicalUserAccount>>().ToSelf(); kernel.Bind<AuthenticationService<HierarchicalUserAccount().To<SamAuthenticationService<HierarchicalUserAccount>>();
kernel.Bind<IUserAccountRepository<HierarchicalUserAccount>>().ToMethod(ctx => new BrockAllen.MembershipReboot.RavenDb.RavenUserAccountRepository("RavenDb"));
kernel.Bind<IUserAccountQuery>().ToMethod(ctx => new BrockAllen.MembershipReboot.RavenDb.RavenUserAccountRepository("RavenDb"));
简单的注入(inject)器实现
container.Register(MembershipRebootConfig.Create);
container.Register<UserAccountService<HierarchicalUserAccount>>();
container.Register<AuthenticationService<HierarchicalUserAccount>, SamAuthenticationService<HierarchicalUserAccount>>();
container.Register<IUserAccountRepository<HierarchicalUserAccount>>(() => new RavenUserAccountRepository("RavenDb"), Lifestyle.Singleton);
container.Register<IUserAccountQuery>(() => new RavenUserAccountRepository("RavenDb"));
在行
container.Register<UserAccountService<HierarchicalUserAccount>>();
我有一个错误
对于能够创建 UserAccountService 的容器,它应该只包含一个公共(public)构造函数,但它有 2 个。
参数名称:TConcrete
谢谢你的帮助。
最佳答案
Simple Injector 强制您让您的组件拥有一个公共(public)构造函数,因为拥有 multiple injection constructors is an anti-pattern .
万一UserAccountService
是您的代码库的一部分,您应该删除不应用于 Autowiring 的构造函数。
万一UserAccountService
是可重用库的一部分,您应该避免在这种情况下使用容器的 Autowiring 功能,如 here 所述.在这种情况下,您应该回退到自己连接类型并让您的代码调用正确的构造函数,例如:
container.Register<UserAccountService<HierarchicalUserAccount>>(() =>
new UserAccountService<HierarchicalUserAccount>(
container.GetInstance<MembershipRebootConfiguration<HierarchicalUserAccount>>(),
container.GetInstance<IUserAccountRepository<HierarchicalUserAccount>>()));
关于asp.net-web-api - 成员(member)重新启动用 Simple Injector 替换 Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27292971/