我正在尝试在于2016年5月发布的.NET Core平台上安装Ninject 3.3.2。但是,我遇到了一个错误:依赖项Ninject 3.2.2不支持.NETCoreApp版本v1.0的框架。 是否有人遇到过类似的问题,并且有没有解决方法?
Ninject 3.3.0 在2017年9月26日发布,现在支持.NET Standard 2.0,因此也可以运行在.NET Core 2.0上。
从事情的发展过程(在GitHub上查看问题/讨论)来看,4.0-beta版本中的一些更改可能会被撤销。我认为不会很快发布4.0正式版。因此,我建议使用当前的3.x版本。
我想要补充一下,尽管ASP.Net Core提供了内置的依赖注入,但对于更高级的场景来说是不够的。因为它不支持Ninject、AutoFac、Unity或StructureMap支持的各种功能。
目前,我知道的仅有支持完全的.NET Core的DI库是AutoFac和现在的Unity。将其添加进去非常简单,您只需要像以下这样使用IServiceProvider(从AutoFac中的依赖项)替换startup.cs中的ConfigureServices中的void即可:
首先,将startup.cs中ConfigureServices的void替换为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有自己内置的依赖注入容器。详见这里。
public void ConfigureServices(IServiceCollection services)
中添加services.AddTransient<Interface, Class>();
private Interface _propertyName;
public Constructor(Interface name)
{
_propertyName= name;
}