Использование Nininject MVC с библиотеками классов
Я довольно плохо знаком с фреймворками IoC, поэтому прошу прощения за терминологию.
Итак, у меня есть проект MVC со ссылками Nininject MVC. У меня есть другие библиотеки классов в моем проекте, например Слой домена, я хотел бы иметь возможность использовать инфраструктуру Ninject там, но все мои привязки находятся вNinjectWebCommon.cs
подApp_Start
папка в проекте MVC:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IHardwareService>().To<WindowsHardwareService>();
kernel.Bind<IStatusApi>().To<StatusApiController>();
}
В настоящее время в моей библиотеке классов я использую инъекцию конструктора, но иногда мне приходится жестко кодировать зависимости:
var service = new WindowsHardwareService();
Когда я хотел бы иметь возможность сделать следующее:
IKernel kernel = new StandardKernel(.....);
var context = kernel.Get<IHardwareService>();
Я не делал следующее, потому что у меня нет никаких модулей? Вся прочитанная мной документация в основном предназначена для обычной библиотеки Ninject, а не для версии MVC.
Что мне нужно сделать, и как я могу использовать обычную библиотеку Ninject с версией MVC?
Обновить
Вот что я попробовал:
Цель этого состоит в том, чтобы каждый проект мог загрузить модуль и получить текущий введенный интерфейс.
App_Start / NinjectWebCommon.cs (В проекте MVC)
private static void RegisterServices(IKernel kernel)
{
var modules = new IoCModules();
var newKernal = modules.GetKernel();
kernel = newKernal;
}
IoCModules.cs (В проекте Project. Ioc)
public class IoCModules
{
public IKernel GetKernel()
{
var modules = new CoreModule();
return modules.Kernel;
}
}
CoreModule.cs (В проекте Project.IoC.Modules) <- это то, где все ссылки на все проекты, это обойти любые проблемы круговой зависимости.
public class CoreModule : NinjectModule
{
public override void Load()
{
Bind<IHardwareService>().To<WindowsHardwareService>();
Bind<IStatusApi>().To<StatusApiController>();
}
}
Но в настоящее время я получаю следующее:
Ошибка активации IHardwareService
Соответствующие привязки недоступны, а тип не является самосвязываемым. Путь активации:
2) Внедрение зависимости IHardwareService в службу параметров конструктора типа DashboardController
1) Запрос на DashboardController
Предложения:
1) Убедитесь, что вы определили привязку для IHardwareService.
2) Если привязка была определена в модуле, убедитесь, что модуль был загружен в ядро.
3) Убедитесь, что вы случайно не создали более одного ядра.
4) Если вы используете аргументы конструктора, убедитесь, что имя параметра соответствует имени параметра конструкторов.
5) Если вы используете автоматическую загрузку модуля, убедитесь в правильности пути поиска и фильтров.