如何从 Autofac 迁移到 Microsoft 依赖注入?
How to migrate from Autofac to Microsoft Dependency Injection?
我不再在我的 .NET Core 3.1 应用程序中使用 Autofac 和 Microsoft 依赖注入。
如何在 DI 中做同样的事情:
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IEventHandlerRabbitMq<>))
.InstancePerDependency();
builder.RegisterType<BusPublisher>().As<IBusPublisher>().InstancePerDependency();
builder.RegisterInstance(DefaultJaeger.Create())
.As<ITracer>()
.SingleInstance()
.PreserveExistingDefaults();
正如Steven所说,你需要为AsClosedTypesOf
使用反射。有一些示例可以如何实现:
public static void RegisterGenerics(this IServiceCollection services, Assembly assembly, Type genericType)
{
AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.FullName == assembly.FullName)
.GetTypes()
.Where(x => x.IsAssignableFrom(genericType) && !x.IsAbstract && !x.IsInterface)
.ToList()
.ForEach(t =>
{
services.AddTransient(genericType, t);
});
}
然后你可以在你的启动中使用它class:
services.RegisterGenerics(Assembly.GetExecutingAssembly(), typeof(IEventHandler<>));
我不再在我的 .NET Core 3.1 应用程序中使用 Autofac 和 Microsoft 依赖注入。
如何在 DI 中做同样的事情:
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IEventHandlerRabbitMq<>))
.InstancePerDependency();
builder.RegisterType<BusPublisher>().As<IBusPublisher>().InstancePerDependency();
builder.RegisterInstance(DefaultJaeger.Create())
.As<ITracer>()
.SingleInstance()
.PreserveExistingDefaults();
正如Steven所说,你需要为AsClosedTypesOf
使用反射。有一些示例可以如何实现:
public static void RegisterGenerics(this IServiceCollection services, Assembly assembly, Type genericType)
{
AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.FullName == assembly.FullName)
.GetTypes()
.Where(x => x.IsAssignableFrom(genericType) && !x.IsAbstract && !x.IsInterface)
.ToList()
.ForEach(t =>
{
services.AddTransient(genericType, t);
});
}
然后你可以在你的启动中使用它class:
services.RegisterGenerics(Assembly.GetExecutingAssembly(), typeof(IEventHandler<>));