Модули 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>();