我发现Ninject最近有introduced support for .NET Standard 2.0 / .NET Core 2.0 .
但是,我找不到实际将其集成到Web应用程序中的任何扩展(例如类似于Ninject.Web.Common)
查看旧的ASP.NET MVC解决方案中的代码,我意识到整个机制是不同的,因为经典的机制依赖于ASP.NET核心中不再可用的 WebActivatorEx.PreApplicationStartMethod
和 WebActivatorEx.ApplicationShutdownMethodAttribute
.
此外,旧的 Ninject.Web.Common
程序集提供了几个用于初始化的有用类--Bootstrapper,OnePerRequestHttpModule,NinjectHttpModule:
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
Bootstrapper.Initialize(CreateKernel);
}
Question: 有没有关于如何将Ninject集成到ASP.NET Core 2.0 Web应用程序中的示例?
1 回答
简答:
检查this project . 但是,它依赖于仍然处于测试版的Ninject 4.0.0,它似乎远不是最终版本(source) . 对于Ninject 3.3.x,请看下面 .
答案很长:
感谢
@Steven
我设法创建了ASP.NET Core 2.0和Ninject(3.3.x和4.0)的工作解决方案 . 代码主要来自Missing-Core-DI-Extensions Git repo,非常感谢dotnetjunkie .无论引用的Ninject版本如何,都必须执行以下操作:
1)在项目中包含AspNetCoreExtensions.cs和AspNetCoreMvcExtensions.cs .
2)创建一个非常简单的服务用于测试DI:
TestService
实现ITestService
:Ninject 3.3.x
如下所示更改
Startup.cs
:1)添加这些成员
2)添加到
ConfigureServices(IServiceCollection services)
(最后)3)添加到
Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
(开头)4)添加以下方法和内部类:
5)创建
BindToMethod
扩展方法6)通过将自定义服务注入控制器,将断点设置为测试服务构造函数并检查调用堆栈来测试DI . 除了提供一个实例,调用堆栈应该点击自定义代码来集成Ninject(例如
ConfigureRequestScoping
方法)Ninject 4.0.0
IKernel
已在版本4中弃用,因此应使用IReadOnlyKernel和IKernelConfiguration类(尽管上面的代码应该有效) .1)使用新类(
IReadOnlyKernel
)2)3)是一样的
4)方法略有不同:
5)扩展必须使用
IKernelConfiguration