【发布时间】:2023-03-17 14:00:01
【问题描述】:
我将停止在我的 .NET Core 3.1 应用程序中使用 Autofac 和 Microsoft Dependency Injection。
如何在 DI 中做同样的事情:
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IEventHandlerRabbitMq<>))
.InstancePerDependency();
builder.RegisterType<BusPublisher>().As<IBusPublisher>().InstancePerDependency();
builder.RegisterInstance(DefaultJaeger.Create())
.As<ITracer>()
.SingleInstance()
.PreserveExistingDefaults();
【问题讨论】:
-
在 MS.DI 中没有
RegisterAssemblyTypes等价物。您必须显式注册每个实现,或者必须使用反射来查找和注册所有实现。 -
顺便说一句,你知道你可以在你的 .NET Core 应用程序中继续使用 Autofac 吗?
-
Assembly.GetExecutingAssembly() .GetTypes() .Where(item => item.GetInterfaces() .Where(i => i.IsGenericType).Any(i => i.GetGenericTypeDefinition() = = typeof(IEventHandlerRabbitMq)) && !item.IsAbstract && !item.IsInterface) .ToList()
-
.ForEach(assignedTypes => { var serviceType =assignedTypes.GetInterfaces().First(i => i.GetGenericTypeDefinition() == typeof(IEventHandlerRabbitMq)); types.Add(assignedTypes) ; services.AddScoped(serviceType, assignedTypes); });
-
我可以改用 GetExecutingAssembly 吗?
标签: .net-core dependency-injection autofac