【发布时间】:2013-09-25 11:51:29
【问题描述】:
我找到了这个帖子Replace Ninject with Simple Injector
但尚未找到后续迁移的解决方案。 使用 Ninject:
public class ServiceClass : IServiceClass
...
IKernel kernel
...
this.kernel.Bind<IServiceClass>().ToMethod(context => this);
我尝试将这种结构与 Simple Injector 一起使用:
public class ServiceClass : IServiceClass
...
Container container
...
this.container = container;
this.container.Register<IServiceClass>(() => container.GetInstance<ServiceClass >());
它是否等于Ninject one?
Ninject 的第二部分是:
public void BindSomeCallback(DelegateNumberOne delegateNumberOne)
{
this.kernel.Rebind<DelegateNumberOne>().ToConstant(delegateNumberOne);
}
到:
public void BindSomeCallback(DelegateNumberOne delegateNumberOne)
{
this.container.Register<DelegateNumberOne, delegateNumberOne>();
}
【问题讨论】:
-
为什么将
ServiceClass的注册放在该类本身,而不是将所有注册放在Composition Root 中? -
@Steven 这个 ServiceClass 是一种入口点 - 并且有 2 个构造函数 - 一个用于测试套件 - 为测试准备的依赖项和另一个工作代码
-
@Steven Delphi 部分遗留代码开始我在这里展示的 .NET 部分
-
我强烈建议您不将 DI 注册分散到整个代码库中,并防止让您的应用程序依赖于您的容器。将所有注册放在一个地方(您的作曲根)。
-
@Steven The ServiceClass - 它是一个地方
标签: c# dependency-injection ninject simple-injector