是否可以配置ASP.NET Core DI来解析所有类? 与Autofac AnyConcreteTypeNotAlreadyRegisteredSource功能类似的东西。
我可以在ASP.NET Core中使用Autofac,但我不想在我的应用程序中添加额外的库,因为ASP.NET Core已经有了DI。
所以基本上代替:
services.AddTransient<MyService>();
services.AddTransient<MyAnotherService>();
我更喜欢做类似的事情:
services.ResolveAll();
答案 0 :(得分:4)
也许Scrutor(扫描功能)与您要寻找的很接近。 https://github.com/khellang/Scrutor
答案 1 :(得分:3)
ASP.NET Core DI不支持自动发现和自动注册,并且没有计划添加这些功能(至少在附近功能中)。
主要原因是.NET Core团队试图尽可能简化内置容器,并为添加其他DI容器节省了一种简单/直接的方式。
答案 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);
}