如何从 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<>));