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