在.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。 以下是要实施的步骤。
- 在
public void ConfigureServices(IServiceCollection services)
转到startup.cs - 添加
services.AddTransient
(); - 转到要应用依赖项注入的控制器。
- 创建全局
private Interface _propertyName;
- 将接口类型变量传递给构造函数
public Constructor(Interface name) { _propertyName= name; }
- 现在,您可以通过_propertyName访问该类的成员。