gpt4 book ai didi

asp.net-mvc-4 - 将 Ninject 和 Ninject.Extensions.Conventions 与引用的程序集一起使用

转载 作者:行者123 更新时间:2023-12-04 04:32:29 25 4
gpt4 key购买 nike

我正在尝试获取 Ninject设置为 ASP.NET MVC 4项目。

我的解决方案中有 3 个项目。主要的 MVC 4 Web 应用程序,它引用了 2 个支持程序集( My.Services.dllMy.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()无济于事。

顺便说一句,如果我把这两种类型, MyServiceMyRepository在 Web 应用程序中而不是在附属程序集中,并删除 RegisterServices 的最后一行,然后所有依赖关系都得到解决,一切正常。

最佳答案

你只能有一个 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());

关于asp.net-mvc-4 - 将 Ninject 和 Ninject.Extensions.Conventions 与引用的程序集一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com