Я - полный новичок к ninject
Я разделял чужой код и нашел несколько экземпляров nInject модулей - классы, которые происходят из Ninject. Модули. Модуль, и имеет метод загрузки, который содержит большую часть их кода.
Эти классы называют путем вызова метода LoadModule экземпляра StandardKernel и передачи его экземпляр класса модуля.
Возможно, я пропускаю что-то очевидное здесь, но каково преимущество этого законченного просто создание простого класса и вызов его метода или возможно статического класса со статическим методом?
Модули Ninject - это инструменты, используемые для регистрации различных типов в контейнере IoC. Преимущество заключается в том, что эти модули затем хранятся в своих собственных классах. Это позволяет помещать различные уровни/услуги в их собственные модули.
// some method early in your app's life cycle
public Kernel BuildKernel()
{
var modules = new INinjectModule[]
{
new LinqToSqlDataContextModule(), // just my L2S binding
new WebModule(),
new EventRegistrationModule()
};
return new StandardKernel(modules);
}
// in LinqToSqlDataContextModule.cs
public class LinqToSqlDataContextModule : NinjectModule
{
public override void Load()
{
Bind<IRepository>().To<LinqToSqlRepository>();
}
}
Наличие нескольких модулей позволяет разделить проблемы даже внутри контейнера IoC.
Остальные вопросы звучат так, как будто это больше касается IoC и DI в целом, а не только Ninject. Да, вы можете использовать статические объекты конфигурации, чтобы делать практически все, что делает контейнер IoC. Контейнеры IoC становятся действительно хорошими, когда у вас есть несколько иерархий зависимостей.
public interface IInterfaceA {}
public interface IInterfaceB {}
public interface IInterfaceC {}
public class ClassA : IInterfaceA {}
public class ClassB : IInterfaceB
{
public ClassB(IInterfaceA a){}
}
public class ClassC : IInterfaceC
{
public ClassC(IInterfaceB b){}
}
Построение ClassC - это боль на данном этапе, с множеством глубин интерфейсов. Намного проще просто попросить ядро для IInterfaceC.
var newc = ApplicationScope.Kernel.Get<IInterfaceC>();
, Возможно, я пропускаю что-то очевидное здесь, но каково преимущество этого просто создав простой класс и вызов его метода, или возможно a статический класс со статическим методом?
Да, можно просто звонить, набор Обязывают
операторы устанавливать привязку, без модуля.
различие - это при помещении этих операторов в модуль затем:
IKernel. Загрузка (IEnumerable <блок>)
может динамично открыть такие модули посредством отражения и загрузить их. IKernel. Разгрузиться (представляют в виде строки)