Я использую контейнер Unity IoC, и мне нужно перехватить любые вызовы Resolve для определенного базового интерфейса и запустить собственный код для создания этих типов.
Другими словами, в примере кода ниже, когда я вызываю container.Resolve<IFooN>()
, если у него нет экземпляра конкретного типа реализации, он вызывает MyFactoryFunction
для его создания, иначе я хочу, чтобы он возвращал кешированная копия.
Стандартный контейнер Unity не способен создавать эти объекты ( update:, поскольку они являются объектами удаленного доступа .NET, поэтому конкретные классы не существуют ни в одной сборке на локальном компьютере), и я не хотите создавать их спереди и хранить их с помощью RegisterInstance.
interface IFoo : IBase { ... }
interface IFoo2 : IBase { ... }
...
container.Resolve<IFoo2>();
...
IBase MyFactoryFunction(Type t)
{
...
}
Я предполагаю, что могу создать расширение Unity для этого, но мне было интересно, есть ли там решение, которое я могу взять.