asp.net-web-api - 成员(member)重新启动用 Simple Injector 替换 Ninject

标签 asp.net-web-api ninject ravendb simple-injector membershipreboot

我需要在使用 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/

相关文章:

c# - 将运行时值注入(inject) Unity 依赖解析器

asp.net - 何时以及如何正确使用 [ResponseType(typeof(...))]?

c# - ASP.Net core 2.0 Web API 中的 Cookie 身份验证

ravendb - 如何修补 RavenDB 中某个类型的所有文档?

python - 如何使用 Ravendb 同时插入多个附件

entity-framework - 在 REST API 中实现多个参数过滤器的最简洁方法

c# - Ninject InRequestScope 丢失

c# - NInject 扩展工厂

asp.net-mvc - 在 mvc 5 项目中安装 ninject mvc 3 后出现的问题

c# - RavenDB 错误 : I can't access var store from a different class. 任何建议