我正在尝试将Ninject设置为一个ASP.NET MVC 4项目。
我有3个项目在我的解决方案。主要的mvv4web应用程序,它引用了两个支持程序集(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();
});
} 如果运行应用程序,就会在RegisterServices方法的最后一行上得到一个错误(RegisterServices)。
您可以在代码中看到,我也尝试过x.FromAssemblyContaining<MyRepository>().SelectAllClasses().BindDefaultInterface(),但没有效果。
顺便说一句,如果我将MyService和MyRepository这两种类型放在web应用程序中而不是附属程序集中,并删除RegisterServices的最后一行,那么所有的依赖项都会被解析,一切都能正常工作。
发布于 2013-12-03 13:58:49
您只能在一个From... kernel.Bind 调用中使用一个表达式。
因此,在不同的FromAssemblyContaining语句中调用kernel.Bind,它应该工作得很好:
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses().BindDefaultInterface());
kernel.Bind(x => x.FromAssemblyContaining<MyRepository>()
.SelectAllClasses().BindDefaultInterface());
kernel.Bind(x => x.FromAssemblyContaining<MyService>()
.SelectAllClasses().BindDefaultInterface());https://stackoverflow.com/questions/20351797
复制相似问题