Интерфейс Autofac Generic не назначается службе - PullRequest
1 голос
/ 21 июня 2019

У меня около 20 таких регистраций в приложении:

builder.RegisterType(typeof(FilterParser<>)).As(typeof(IFilterParser<>)).InstancePerDependency();

Когда я пытаюсь построить свой контейнер, я получаю сообщение об ошибке:

Тип 'My.Namespace.FilterParser`1 [TEntity]' нельзя назначить службе 'My.Namespace.IFilterParser`1'. '

Обратите внимание, что разница заключается в [TEntity] в реализации и его отсутствии в интерфейсе.

Мои сервисы реализуют интерфейсы:

public class FilterParser<TEntity> : IFilterParser<TEntity> where TEntity : new () 

public interface IFilterParser<TEntity> where TEntity : new () 

Я также реализовал эту регистрацию, используя ядро ​​.net, и она отлично работает, но в Autofac просто отказывается работать.

Я даже пытался AsImplementedInterfaces, и я получаю ту же ошибку

builder.RegisterType(typeof(FilterParser<>)).AsImplementedInterfaces()
                        .InstancePerDependency();

1 Ответ

3 голосов
/ 21 июня 2019

Используйте метод построителя RegisterGeneric():

builder.RegisterGeneric(typeof(FilterParser<>))
    .As(typeof(IFilterParser<>))
    .InstancePerDependency();

Когда из контейнера запрашивается соответствующий тип сервиса, Autofac отобразит его в эквивалентную закрытую версию типа реализации

Ссылка Принципы регистрации: открытые общие компоненты

...