我想在我的应用程序中跨各个层共享容器。我开始创建一个静态类,它初始化容器并在容器中注册类型。
public class GeneralDIModule : NinjectModule
{
public override void Load()
{
Bind<IDataBroker>().To<DataBroker>().InSingletonScope();
}
}
public abstract class IoC
{
private static IKernel _container;
public static void Initialize()
{
_container = new StandardKernel(new GeneralDIModule(), new ViewModelDIModule());
}
public static T Get<T>()
{
return _container.Get<T>();
}
}
我注意到还有一个Resolve方法。 Resolve和Get有什么区别?
在我的单元测试中,我并不总是希望我的容器中的每个注册类型。有没有办法初始化一个空容器,然后注册我需要的类型。我也将在单元测试中嘲笑类型,所以我也必须注册它们。
有一个Inject方法,但它说实例的生命周期不受管理?
请有人请我以正确的方式安排我吗?
如何注册,取消注册对象并重置容器。
答案 0 :(得分:2)
默认情况下,Ninject以瞬态生活方式绑定组件,Ninject不跟踪瞬态实例。 Resolve在内部使用,除非您确实知道自己在做什么,否则代码不应使用它。如果要模拟容器,请在github上使用ninject.moq扩展名。您引用的注入方法适用于您自己创建的实例。使用Get和TryGet方法。