Отражение Dotnet: как создать общий дочерний класс во время выполнения с меньшим количеством параметров?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Отражение Dotnet: как создать общий дочерний класс во время выполнения с меньшим количеством параметров?

Сообщение Anonymous »

Мне нужно создать тип во время выполнения, который имеет меньше параметров, чем его родительский
(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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»