1

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

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 方法。解决和获取有什么区别?

在我的单元测试中,我并不总是希望容器中的每个注册类型。有没有办法初始化一个空容器,然后注册我需要的类型。我将在单元测试中模拟类型,所以我也必须注册它们。

有一个 Inject 方法,但它说实例的生命周期不受管理?

有人可以让我以正确的方式吗?

如何注册、取消注册对象和重置容器。

4

1 回答 1

2

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

于 2010-05-19T04:12:50.840 回答