Ninject in .NET Core

Dej*_*čić 15 .net c# asp.net ninject .net-core

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

Bat*_*nit 32

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

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


Bra*_*don 15

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

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

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

public IServiceProvider ConfigureServices(IServiceCollection services)
Run Code Online (Sandbox Code Playgroud)

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

var builder = new ContainerBuilder();
builder.Populate(services);
var container = builder.Build();
return container.Resolve<IServiceProvider>();
Run Code Online (Sandbox Code Playgroud)

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

  • 我还要补充一点,我跑过github repo,它有一种"适配器",允许你在.net核心中使用Ninject.在我看来,它有点像"解决方法",但似乎应该有效.https://github.com/dotnetjunkie/Missing-Core-DI-Extensions (4认同)

Dan*_*ski 5

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

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

  • 捆绑的IOC/DI非常简单.您应该使用适当的容器,如Autofac或StructureMap,并忽略内置容器. (5认同)
  • This answer is incorrect (for Core 2.0), see response from @BatteryBackupUnit (4认同)