我正在尝试使用Ninject
项目设置ASP.NET MVC 4
。
我的解决方案中有3个项目。主要的MVC 4 Web应用程序,引用了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)
在主Web应用程序中,我有一个带有以下构造函数的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
放在Web应用程序而不是附属程序集中并删除RegisterServices的最后一行,那么所有依赖项都会得到解决,一切正常。
答案 0 :(得分:3)
From...
来电中只能包含一个kernel.Bind
表达。
请拨打不同FromAssemblyContaining
的{{1}}
声明,它应该工作正常:
kernel.Bind