Я пытаюсь получить Ninject
с проектом ASP.NET MVC 4
.Использование Ninject и Ninject.Extensions.Conventions с ссылочными сборками
У меня есть 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, тогда все зависимости разрешаются, и все работает правильно.
Спасибо, я никогда бы не подумал об этом. –
Мне тоже, для меня также не было очевидным, в чем проблема. На сайте github расширения нет никакого сложного примера ... Мне пришлось искать источник, чтобы проверить, что пошло не так. – nemesv