Я хочу разделить контейнер на разных уровнях в моем приложении. Я начал создавать статический класс, который инициализирует контейнер и типы регистров в контейнере.Ninject: Shared DI/IoC container
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, но он говорит, что жизненный цикл экземпляра не управляется?
Может ли кто-нибудь, пожалуйста, установить меня правильно?
Как я могу зарегистрировать, отменить регистрацию объектов и сбросить контейнер.
Hi Ian Спасибо за ответ. Несколько вопросов - Способ Get создает новый экземпляр типа с переходным стилем жизни? - Если я создаю издевательский экземпляр типа с использованием какой-то насмешливой структуры, скажем, Rhino Mocks и внедрить ее в ядро, тогда последующий Get создаст новый экземпляр этого типа или вернет тот же экземпляр? - Является ли ninject.moq чем-то другим, чем RhinoMocks? Спасибо – joblot
Если вы не указали стиль жизни или укажите .InTransientScope(), каждый вызов .Get вернет новый экземпляр. Если вы можете, используйте Moq или RhinoMocks перед Ninject.Moq (который использует Moq). Moq и RhinoMocks - оба изящные рамки. –
, поэтому, если я укажу SingletonScope при привязке в модуле и вставляю вымышленный экземпляр типа, каждый вызов Get вернет тот же экземпляр? Что это означает, когда сказано, что Inject вводит указанный существующий экземпляр без управления его жизненным циклом? Я также реализовал в версии Silverlight версии Ninject нет версии Load, которая принимает струнную награду, которую можно использовать для динамической загрузки модулей Load ("*. Dll"). Как добиться динамической загрузки в Silverlight. Спасибо – joblot