Ninject:共享DI / IoC容器

时间:2010-05-19 03:41:22

标签: ninject ninject-2

我想在我的应用程序中跨各个层共享容器。我开始创建一个静态类,它初始化容器并在容器中注册类型。

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方法,但它说实例的生命周期不受管理?

请有人请我以正确的方式安排我吗?

如何注册,取消注册对象并重置容器。

1 个答案:

答案 0 :(得分:2)

默认情况下,Ninject以瞬态生活方式绑定组件,Ninject不跟踪瞬态实例。 Resolve在内部使用,除非您确实知道自己在做什么,否则代码不应使用它。如果要模拟容器,请在github上使用ninject.moq扩展名。您引用的注入方法适用于您自己创建的实例。使用Get和TryGet方法。