将 Ninject 代码替换为 Simple Injector

本文关键字:Simple Injector 替换 Ninject 代码 | 更新日期: 2023-09-27 18:32:54

我找到了这篇文章 用简单的注射器替换 Ninject

但尚未找到后续迁移的解决方案。使用Ninject:

public class ServiceClass : IServiceClass
...
IKernel kernel
...
this.kernel.Bind<IServiceClass>().ToMethod(context => this);

我尝试将这种结构与简单注射器一起使用:

public class ServiceClass : IServiceClass
   ...
   Container container
   ...
   this.container = container;
   this.container.Register<IServiceClass>(() => container.GetInstance<ServiceClass >());

等于宁注射一吗?

Ninject的第二部分是:

public void BindSomeCallback(DelegateNumberOne delegateNumberOne)
{        
   this.kernel.Rebind<DelegateNumberOne>().ToConstant(delegateNumberOne);
}

自:

public void BindSomeCallback(DelegateNumberOne delegateNumberOne)
{ 
   this.container.Register<DelegateNumberOne, delegateNumberOne>();
}

将 Ninject 代码替换为 Simple Injector

等于宁注射一吗?

不。这是:

this.container.Register<IServiceClass>(() => this);

但是,由于您实际上是在注册单例,因此可以更好地编写如下:

this.container.RegisterSingle<IServiceClass>(this);

Ninject的第二部分是:

同样在这里,您希望将委托注册为单一实例:

this.container.RegisterSingle<DelegateNumberOne>(delegateNumberOne);