Мне нужно создать тип во время выполнения, который имеет меньше параметров, чем его родительский
(A : B).
Вот код, который будет использовать этот метод.
Мотивация состоит в том, чтобы сохранить некоторые вещи внутри своих проектов. Я хочу использовать репозитории и не хочу делать контекст БД общедоступным для всех клиентских проектов.
// DOMAIN LAYER
public interface IDbRepository
where TEntity : Entity
{
int Save(TEntity entity);
//...
}
// INFRASTRUCTURE LAYER
public interface IApp1DbRepository : IDbRepository;
public interface IApp2DbRepository : IDbRepository;
public interface IApp3DbRepository : IDbRepository;
...
internal abstract class DbRepository( // 2 pars
TDbContext dbContext,
IEditInfoSetter editInfoSetter,
IChangePublisher changePublisher)
: IDbRepository
where TDbContext : AppDbContextBase
where TEntity : Entity
{
//...
}
internal class App1DbRepository( // 1 par
App1DbContext dbContext,
IEditInfoSetter editInfoSetter,
IChangePublisher changePublisher)
: DbRepository(dbContext, editInfoSetter, changePublisher),
IApp1DbRepository
where TEntity : Entity
{
}
...
.Services
.AddScoped(typeof(IApp1DbRepository), typeof(App1DbRepository))
.AddScoped(typeof(IApp2DbRepository), typeof(App2DbRepository))
.AddScoped(typeof(IApp3DbRepository), typeof(App3DbRepository))
// (1)
// Client App with DI
public class MyClass(
IApp1DbRepository myApp1LogEvents,
IApp2DbRepository myApp2LogEvents,
IApp2DbRepository myApp2users)
{
//...
}
Можно ли создать метод, который будет делать следующее?
// This method is needed to keep types
// DbRepository and AppDbContextBase internal to their projects.
static Type CreateRepoType()
{
//...
return type; // !!! : DbRepository, TIMyDbRepository
}
// To change code (1) to
.Services
.AddScoped(typeof(IApp1DbRepository), CreateRepoType())
.AddScoped(typeof(IApp2DbRepository), CreateRepoType())
.AddScoped(typeof(IApp3DbRepository), CreateRepoType())
Подробнее здесь: https://stackoverflow.com/questions/792 ... -fewer-par
Отражение Dotnet: как создать общий дочерний класс во время выполнения с меньшим количеством параметров? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение