Итак, вот моя структура приложения:
У меня есть такой код хранилища
public interface IRepository<T> { }
public class Repository <T> { }
public interface ITestRepository : IRepository<Model> { }
public class TestRepository : Repository<Model>, ITestRepository { }
public interface ITest2Repository : IRepository<Model2> { }
public class Test2Repository : Repository<Model2>, ITest2Repository { }
и я использую этот репозиторий для своей службы в Интернете, например:
public class TestService : ITestService
{
private readonly ITestRepository testRepository;
private readonly ITest2Repository test2Repository;
public TestService(ITestRepository testRepository, ITest2Repository test2Repository)
{
this.testRepository = testRepository;
this.test2Repository = test2Repository;
}
}
Прямо сейчас я регистрирую хранилище в Startup.cs
вот так.
services.AddScoped(typeof(IRepository<Model>), typeof(TestRepository));
services.AddScoped(typeof(IRepository<Model2>), typeof(Test2Repository));
services.AddScoped<ITestRepository, TestRepository>();
services.AddScoped<ITest2Repository, Test2Repository>();
и я хочу упростить это. Я недавно гуглил способ регистрации универсального класса, но он сломал мой Program.cs
вот ошибка:
System.ArgumentException: «Не удается создать экземпляр типа реализации« Application.Repositories.Repository1 [TEntity] »для типа службы« Application.Repositories.Interfaces.IRepository1 [TEntity] '.'
и вот как я могу зарегистрировать репозиторий:
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
services.AddScoped<ITestRepository, TestRepository>();
services.AddScoped<ITest2Repository, Test2Repository>();
TL; DR, есть ли решение для упрощения моей регистрации в этом хранилище?