Как перейти с Autofa c на Microsoft Dependency Injection? - PullRequest
0 голосов
/ 03 августа 2020

Я больше не использую Autofa c и использую Microsoft Dependency Injection в моем приложении. NET Core 3.1.

Как я могу сделать то же самое в DI:

builder.RegisterAssemblyTypes(assembly)
    .AsClosedTypesOf(typeof(IEventHandlerRabbitMq<>))
    .InstancePerDependency();

builder.RegisterType<BusPublisher>().As<IBusPublisher>().InstancePerDependency();

builder.RegisterInstance(DefaultJaeger.Create())
    .As<ITracer>()
    .SingleInstance()
    .PreserveExistingDefaults();

1 Ответ

1 голос
/ 03 августа 2020

Как говорит Стивен , вам нужно использовать отражение для 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);
            });
    }

И затем вы можете использовать его в своем классе запуска:

services.RegisterGenerics(Assembly.GetExecutingAssembly(), typeof(IEventHandler<>));
...