Ninject: общий контейнер DI / IoC - PullRequest
1 голос
/ 19 мая 2010

Я хочу поделиться контейнером между различными слоями в моем приложении. Я начал создавать статический класс, который инициализирует контейнер и регистрирует типы в контейнере.

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 Ответ

2 голосов
/ 19 мая 2010

Ninject по умолчанию связывает компоненты во временном образе жизни, а Ninject не отслеживает временные экземпляры. Resolve используется внутри и не должен использоваться вашим кодом, если вы действительно не знаете, что делаете. Если вы хотите смоделировать свой контейнер, используйте расширение ninject.moq на github. Метод inject, на который вы ссылаетесь, предназначен для экземпляров, которые вы создали сами. Используйте методы Get и TryGet.

...