Autofac регистрация для многих реализаций интерфейса - PullRequest
0 голосов
/ 29 августа 2018

У меня есть несколько реализаций интерфейса, которые мне нужно зарегистрировать в Autofac, однако мне не удается найти способ сделать их все вместе, а не по отдельности, как у меня сейчас:

builder.RegisterType<UserDefinedRepository<CType>>().As<IUserDefinedRepository<CType>>();
builder.RegisterType<UserDefinedRepository<LType>>().As<IUserDefinedRepository<LType>>();

И CType, и LType имеют одинаковый базовый тип, а параметр Type интерфейса и реализация класса имеют ограничение одного типа.

Я прочитал множество примеров с реализацией Autofac, но большинство из них кажутся слишком сложными для того, что я пытаюсь сделать, и документация не очень полезна (от моего понимания в любом случае!).

У меня уже есть регистрации всех других моих репозиториев, которые хорошо работали в течение многих лет, но у них всех есть конкретные реализации интерфейсов:

var baseRepoType = typeof(InfraAbsRepos.IRepository);
builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
    .Where(t => baseRepoType.IsAssignableFrom(t))
    .AsImplementedInterfaces()
    .InstancePerRequest();

1 Ответ

0 голосов
/ 30 августа 2018

Попробуйте AsClosedTypesOf как , указанное в документации .

builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
       .AsClosedTypesOf(typeof(IUserDefinedRepository<>))
       .InstancePerRequest();

В зависимости от того, что вы хотите сделать, вам может потребоваться добавить предложение Where для фильтрации списка типов сборок; и / или вы можете добавить AsImplementedInterfaces, если вам нужно зарегистрировать больше интерфейсов или типов.

Если в RegisterAssemblyTypes нет достаточной гибкости, вы всегда можете перебрать загруженный набор типов самостоятельно, используя отражение, и, возможно, объединить это с некоторыми из открытых общих поддержек регистрации в Autofac .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...