在.NET Core中使用Ninject

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

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

ASP.NET Core内置了自己的Dependency Injection容器。请参见此处 。

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

从事物的过程(参见关于GitHub的问题/讨论)看来,4.0-beta中的一些变化似乎将被还原。 我不希望很快就会有4.0决赛。 因此,我建议您使用当前的第3版。

只想添加; 虽然前面的两个答案都是正确的,因为ASP.Net核心确实提供了内置的dependency injection,但对于更高级的场景来说还不够。 因为它不支持Ninject,AutoFac,Unity或StructureMap支持的所有function。

目前,我所知道的唯一完全支持.net核心的DI库是AutoFac,现在也是Unity 。 添加它非常简单。更换内置DI所需要做的唯一事情如下。 这个例子适用于AutoFac,但它看起来几乎与Unity相同。

首先,使用IServiceProvider(来自AutoFac的依赖项)替换startup.cs中ConfigureServices上的void,如下所示:

public IServiceProvider ConfigureServices(IServiceCollection services) 

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

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

我有一个围绕第二部分的包装器,允许您使用AutoFac模块动态加载和构建不同的配置,我可能会确信上传到GitHub或者有兴趣的东西。

Ninject不支持.Net Core,而不是我们可以使用.net核心的dependency injection。 以下是要实施的步骤。

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

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