У меня есть интерфейс IA
и реализации A:IA
и B:IA
. Реализация B
имеет зависимость от IA
с конструктором DI, так что B.ctor(IA)
.Регистрация IoC для класса обертки
Целью этого проекта является обертывание A
с помощью B
и использование их для взаимозаменяемости. A
- это адаптер для базы данных, а B
позволяет кэшировать эти данные.
IA
также зависит от классов поставщиков в этой системе, поэтому, когда я регистрирую эти провайдеры, я хотел бы использовать экземпляр B
. Мой график объект должен в основном выглядеть следующим образом:
new Provider(
new B(
new A(
new DbContex("constr")
)
)
)
, я рассматривал возможность использования интерфейса мечения таким образом, что IB:IA
и B:IB
, но тогда я должен был бы зависеть от IB
моих поставщиков вместо IA
, который не был бы идеальным.
Я также рассмотрел использование фабрики для IA
, которая создает экземпляр B
с использованием экземпляра A
, но это кажется неправильным.
Итак, я предполагаю, что я ищу способ выполнить эту регистрацию с использованием контейнера IoC простого инжектора.
Пример кода класса
public class A : IA
{
private readonly DbContext _context;
public A(DbContext context)
{
_context = context;
}
public T Get<T>()
{
// Do stuff to get and
// return value from database.
}
public void Set<T>(T value)
{
// Do stuff to set value
// in database.
}
}
Wrapper:
public class B : IA
{
private readonly IA _adapter;
public B(IA adapter)
{
_adapter = adapter;
}
public T Get<T>()
{
// Do stuff to get and
// return value from cache
// or database adapter.
}
public void Set<T>(T value)
{
// Do stuff to set value
// in cache and database.
}
}
Потребитель IA
:
public class Provider
{
private readonly IA _adapter;
public Provider(IA adapter)
{
_adapter = adapter;
}
}
замечательного! Огромное спасибо :) – Ablue