Как использовать общий интерфейс в SimpleInjector при регистрации нового TService? - PullRequest
0 голосов
/ 16 сентября 2018

У меня простой интерфейс:

public interface IRepo<T>
{
    T GetSingle(int id);

    IQueryable<T> GetCollection();
}

И несколько реализаций этого интерфейса:

public class ParametersFields_Repo : 
    GenericRepository<Parameters_Fields, MachineDbConnection>, 
    IRepo<Parameters_Fields>
{
    ...
}

public class FieldTypesDict_Repo : 
    GenericRepository<Parameters_FieldTypes_Dict, MachineDbConnection>,
    IRepo<Parameters_FieldTypes_Dict>
{
    ...
}

Теперь я пытаюсь зарегистрировать этот IRepo<T> как TService в SimpleИнжектор, как это выглядит:

private void ConfigureSimpleInjector()
    {
        var container = new Container();
        RegisterDIServices(container);

        DependencyResolver.SetResolver(
            new SimpleInjectorDependencyResolver(container));
    }

    private void RegisterDIServices(Container container)
    {
        container.Register<IFieldModelRepository, FieldModelRepository>(
            Lifestyle.Scoped);
        container.Register<IField_Repo, Field_Repo>(Lifestyle.Scoped);
        container.Register<IRepo<Parameters_Fields>, ParametersFields_Repo>(
            Lifestyle.Scoped);
    }

Но в строке:

container.Register<IRepo<Parameters_Fields>, ParametersFields_Repo>(
    Lifestyle.Scoped);

Я получаю сообщение об ошибке:

Тип 'DbAccess.Repositories.ParametersFields_Repo 'нельзя использовать в качестве параметра типа' TImplementation 'в универсальном типе или методе' Container.Register (Lifestyle) '.Не существует неявного преобразования ссылок из 'DbAccess.Repositories.ParametersFields_Repo' в 'DbAccess.Interface.IRepo'

. Не могли бы вы сказать, что является хорошим подходом для этого ?.Это мой первый раз, когда я пытаюсь использовать DI в проекте.

...