Я пытаюсь настроить Ninject
для проекта ASP.NET MVC 4
.
У меня есть 3 проекта в моем решении. Основное веб-приложение MVC 4, имеющее ссылки на 2 вспомогательные сборки (My.Services.dll
и My.Repository.dll
). My.Services.dll
также имеет ссылку на My.Repository.dll
.
Я добавил пакеты Nuget: Ninject.MVC3 (версия 3.0.0.6) и Ninject.Extensions.Conventions (версия 3.0.0.11).
В основном веб-приложении у меня есть Home controller
со следующим конструктором
public HomeController(IMyService myService)
{
_myService = myService;
}
Сервис имеет такой конструктор:
public MyService(IMyRepository myRepository)
{
_myRepository = myRepository;
}
В моем файле NinjectWebCommon у меня есть:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind(x =>
{
x.FromThisAssembly().SelectAllClasses().BindDefaultInterface();
//x.FromAssemblyContaining<MyRepository>().SelectAllClasses().BindDefaultInterface();
//x.FromAssemblyContaining<MyService>().SelectAllClasses().BindDefaultInterface();
x.From("My.Repository", "My.Services").SelectAllTypes().BindDefaultInterface();
});
}
Если я запускаю приложение, я получаю сообщение об ошибке ("Value cannot be null.\r\nParameter name: first"
) в последней строке метода RegisterServices
.
Вы можете видеть в коде, что я также пробовал x.FromAssemblyContaining<MyRepository>().SelectAllClasses().BindDefaultInterface()
безрезультатно.
Кстати, если я поставлю 2 типа, MyService
и MyRepository
в веб-приложение, а не в сателлитные сборки, и удалю последнюю строку RegisterServices, то все зависимости будут разрешены, и все будет работать правильно.