ASP.NET Core自动解决所有依赖项

时间:2017-03-24 02:28:04

标签: asp.net-core

是否可以配置ASP.NET Core DI来解析所有类? 与Autofac AnyConcreteTypeNotAlreadyRegisteredSource功能类似的东西。

我可以在ASP.NET Core中使用Autofac,但我不想在我的应用程序中添加额外的库,因为ASP.NET Core已经有了DI。

所以基本上代替:

services.AddTransient<MyService>();
services.AddTransient<MyAnotherService>();

我更喜欢做类似的事情:

services.ResolveAll();

3 个答案:

答案 0 :(得分:4)

也许Scrutor(扫描功能)与您要寻找的很接近。 https://github.com/khellang/Scrutor

答案 1 :(得分:3)

ASP.NET Core DI不支持自动发现和自动注册,并且没有计划添加这些功能(至少在附近功能中)。

主要原因是.NET Core团队试图尽可能简化内置容器,并为添加其他DI容器节省了一种简单/直接的方式。

相关问题:Property Injection in Asp.Net Core

答案 2 :(得分:2)

似乎我们可以通过一点反思开始这种通用的自动注射概念

我已经过滤了“提供者”命名空间,并寻找与接口没有“我”拼写相同的类名,但当然根据自己的喜好来调整

(此代码在asp.net core 2.0上下文中运行)

  var allProviderTypes = System.Reflection.Assembly.GetExecutingAssembly()
    .GetTypes().Where(t=>t.Namespace != null && t.Namespace.Contains("Providers"));

  foreach(var intfc in allProviderTypes.Where(t=>t.IsInterface)) {
    var impl = allProviderTypes.FirstOrDefault(c=>c.IsClass && intfc.Name.Substring(1) == c.Name);
    if (impl != null) services.AddScoped(intfc, impl);
  }