我一直在使用NInject一段时间,现在我将在Asp.net核心中开始一个项目。似乎NInject cannot be used with Asp.net Core。所以现在我的问题是Asp.net核心提供的任何di modules just as NInject或其他di容器提供吗?ASP.NET核心内置DI系统中的DI模块
回答
Asp.Net Core提供了开箱即用的DI框架,它允许您为每个Http Request或单例的每个解析请求添加一个对象。 所有这一切都在ConfigureServices
方法 前完成:
public void ConfigureServices(IServiceCollection services)
{
//Your configuration
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
你可以阅读更多关于它在这里
https://docs.asp.net/en/latest/fundamentals/dependency-injection.html
它没有真正回答OP的问题,如果有模块支持,其中模块在每个类库中定义,并在那里注册,主应用程序只在引导期间加载模块类 – Tseng
它怎么没有回答题?问题是关于对DI的asp.net核心支持,答案是它已经做好了准备,那么你的POV的答案是什么?为什么我们应该建议像ninject这样的另一个DI,如果它已经存在OOB? –
不,问题不是关于DI的ASP.NET核心支持,OP知道它在那里。他特意询问模块。与在邮件应用程序中执行注册相反,模块是放置在库中的类,用于执行注册。你可以在这里阅读关于Ninject中的模块的https://github.com/ninject/Ninject/wiki/Modules-and-the-Kernel。其他IoC也有它(CastleWindsor,Autofac,Unity Container)。但是,由于我在答复中指出的原因,ASP.NET Core的DI没有这个功能 – Tseng
ASP.NET核心不提供任何模块的支持的。它被设计成一个简单的开箱即用的容器,第三方IoC容器可以插入。
所以没有自动注册,程序集扫描,装饰器,拦截器或模块。如果你想要它们,你需要使用第三方框架(AutoFac,StructureMap等)。
第三方库使用注册方法进行注册,在ConfigureServices
方法中被称为services.AddXxx()
。
public static class MyLibraryServiceCollectionExtensions
{
public static IServiceCollection AddMyLibrary(this IServiceCollection services)
{
services.TryAddScoped<IMyService,MyService>();
return services;
}
}
这是注册库(因为它不依赖于任何IoC容器除了内置IServiceCollection
,这在ASP.NET核心时插入第三方容器使用过),为东西首选方式就像“业务逻辑库”一样,并不存在这样的事情(之前的模块很有用)。
只需添加到其他的好答案,您可以使用例如SimpleInjector。这是一个支持.Net Core(以及ASP.Net Core)的辉煌的DI容器。查看如何使用.Net Core here的详细信息。
- 1. 基于HttpContext的ASP.Net核心DI工厂
- 2. IServiceProvider.GetSingleton在Asp.Net核心解析为空DI
- 3. 的IoC DI用于.NET核心身份
- 4. EF核心和在Windows服务的DI
- 5. 如何使用ASP.NET MVC核心的DI注册自定义IObjectModelValidator
- 6. ASP.Net的WebAPI:如何通过统一DI
- 7. 从静态工厂类访问ASP.NET核心DI容器
- 8. 注入工厂Func键与ASP.NET核心DI
- 9. DI容器和遗留系统
- 10. ModelMap DI上的StructureMap DI
- 11. 如何在TYPO3核心的类中使用DI?
- 12. 使用ASP.NET Core的DI
- 13. DI创建模式
- 14. 在传统应用系统中应用DI实践
- 15. JSR330 DI与弹簧DI
- 16. 与Cors的WebApi2冲突的Unity DI DI
- 17. asp.net mvc _ViewStart DI挂钩
- 18. DI的部分模拟?
- 19. DI容器模块注册依赖倒置原理
- 20. 与DI
- 21. ActionAttribute DI
- 22. 将Ninject DI转换为Unity DI
- 23. DI,Guice和策略模式
- 24. ZF2 DI配置共享
- 25. 在内核模块中获取文件系统挂载点
- 26. 如何在内核模块中安装系统调用
- 27. 的Netfilter的内核模块会导致我的系统崩溃
- 28. Mozilla核心Javascript模块的位置
- 29. ASP.NET中的可配置内容系统
- 30. AngularJS - 使用ES6导入代替角度DI系统
你误解了[this](https://stackoverflow.com/questions/32788637/continued-ninject-support-in-asp-net-mvc-6/32797105#32797105)的答案。答案清楚地表明Ninject *可以被使用。 – Steven