Ninject in .NET Core

本文关键字:Core NET in Ninject | 更新日期: 2023-09-27 17:56:09

我正在尝试在2016年5月发布的.NET Core中安装Ninject 3.3.2。我收到一个错误:依赖项Ninject 3.2.2不支持框架。NETCoreApp, Version=v1.0.有没有人遇到过类似的问题,有什么解决方案吗?

Ninject in .NET Core

Ninject 3.3.0 于 2017 年 9 月 26 日发布,现在面向 .NET Standard 2.0,因此也可以在 .NET Core 2.0 上运行。

从事情的发展过程来看(参见GitHub上的问题/讨论),4.0-beta中的一些更改似乎可能会被恢复。我没想到很快会有4.0决赛。因此,我建议使用当前的版本 3 版本。

只是想补充一下;虽然前面的两个答案都是正确的,因为 ASP.Net 核心确实提供了内置的依赖注入,但对于更高级的方案来说,这是不够的。因为它不支持Ninject,AutoFac,Unity或StructureMap支持的大量功能。

目前,我知道的唯一完全支持.net核心的DI库是AutoFac和现在的Unity。添加它非常简单。替换内置 DI 唯一需要做的就是如下。此示例适用于 AutoFac,但对于 Unity 来说几乎相同。

首先,将启动时 ConfigureServices 上的空白.cs替换为 IServiceProvider(来自 AutoFac 的依赖项),如下所示:

public IServiceProvider ConfigureServices(IServiceCollection services)

然后创建一个容器生成器,从 ConfigureServices 构建并解析 IServiceProvider:

var builder = new ContainerBuilder();
builder.Populate(services);
var container = builder.Build();
return container.Resolve<IServiceProvider>();

我在第二部分有一个包装器,允许您使用 AutoFac 模块动态加载和构建不同的配置,如果有兴趣,我可能会被说服上传到 GitHub 或其他东西。

Ninject不支持.NET Core。您可以检查它的网站,以确保是否没有支持它的版本。

ASP.NET Core 内置了自己的依赖注入容器。看这里。

Ninject不支持.Net Core,取而代之的是,我们可以使用.NET Core的依赖注入。 以下是要实现的步骤。

  1. 转到启动.cs在public void ConfigureServices(IServiceCollection services)
  2. 添加services.AddTransient<Interface, Class>();
  3. 转到要应用依赖项注入的控制器。
  4. 创建全局private Interface _propertyName;
  5. 将接口类型变量传递给构造函数,例如

 public Constructor(Interface name)
 {
     _propertyName= name;
 }
  1. 现在,您可以通过_propertyName访问类的成员。