gpt4 book ai didi

c# - 在 ASP .Net 3.5 中使用 Ninject 2.0

转载 作者:行者123 更新时间:2023-11-30 14:19:42 27 4
gpt4 key购买 nike

我正在尝试将 Ninject 2.0 与 Asp .Net 3.5 网络应用程序一起使用。以下是我正在使用的 DLLS 和它的版本。

  • Ninject.dll - v2.0.0.0
  • Ninject.Extensions.Logging.dll v2.0.0.0
  • Ninject.Web.dll v1.0.0.0

在我的 global.ascx.cs 中,我有以下方法。

protected override IKernel CreateKernel()
{
IKernel kernel = new StandardKernel();
kernel.Bind<IDataAccess>().To<DataAccessEntBlock>().InSingletonScope();
return kernel;
}

当我运行应用程序时,出现以下错误。

Error activating ILoggerFactory
No matching bindings are available, and the type is not self-bindable.
Activation path:
1) Request for ILoggerFactory

Suggestions:
1) Ensure that you have defined a binding for ILoggerFactory.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using automatic module loading, ensure the search path and filters are

正确。

我不明白,即使我没有尝试注册 Logger,它似乎正在尝试创建它自己的。我该如何解决这个错误?我必须使用 Ninject 的任何扩展记录器吗?

谢谢GK

最佳答案

错误表明 Ninject 在某处试图将 ILoggerFactory 接口(interface)解析为具体类。根据您在上面提到的内容,听起来您的 ASP.Net Web 应用程序是基于 WebForms 的,而不是 ASP.Net MVC 应用程序。

考虑到这一点,您的页面应该派生自 PageBase,它是 Ninject 网络库提供的抽象类。该类具有以下属性定义:

[Inject]
public ILogger Logger { get; set; }

因此,当您的页面被实例化时,Ninject 会尝试将记录器注入(inject)到页面的属性中。正如错误所暗示的那样,您需要为 ILoggerFactoryILogger 定义一个绑定(bind);但是,您提供的唯一绑定(bind)是针对 IDataAccess 的。您还需要加载日志扩展库中定义的模块之一。我相信你可以在 NLog 和 Log4Net 之间做出选择。因此,例如,如果您想使用 Log4Net,您的 CreateKernel 函数将如下所示:

protected override IKernel CreateKernel()
{
IKernel kernel = new StandardKernel(new Log4netModule());
kernel.Bind<IDataAccess>().To<DataAccessEntBlock>().InSingletonScope();
return kernel;
}

这假设您在文件中有一个 using Ninject.Extensions.Logging.Log4net; 语句。

在任何一种情况下,您都必须选择一个记录器并加载它的绑定(bind)(通过模块),因为 Ninject Web 库需要它。如果您现在没有任何日志记录问题,您可以选择提供什么都不做的 ILoggerFactoryILogger 的实现(即“空”记录器)并绑定(bind)你自己的虚拟 ILoggerFactory。

关于c# - 在 ASP .Net 3.5 中使用 Ninject 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346918/

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