Я ищу информацию об использовании и настройке виндзора для предоставления динамического прокси для перехвата вызовов в экземпляр другого класса.Использование DynamicProxy в качестве шаблона декоратора в контейнере виндзора
Мой класс представляет ресурс, который должен сохраняться в качестве долговечного экземпляра контейнером по соображениям производительности. Однако иногда этот ресурс может переходить в непостижимое состояние и требует обновления. Я бы хотел, чтобы контейнер обрабатывал это, поэтому код клиента не нужен. Я могу создать свою собственную фабрику, чтобы сделать это, я хотел бы знать, есть ли какая-то холодная регистрация в Windsor, чтобы сделать это для меня, поэтому мне не нужно создавать отдельный заводский класс :)
Вот несколько псевдокодов чтобы продемонстрировать эту проблему:
public interface IVeryImportantResource
{
void SomeOperation();
}
public class RealResource : IVeryImportantResource
{
public bool Corrupt { get; set; }
public void SomeOperation()
{
//do some real implementation
}
}
public class RealResourceInterceptor : IInterceptor
{
private readonly IKernel kernel;
public RealResourceInterceptor(IKernel Kernel)
{
kernel = Kernel;
}
public void Intercept(IInvocation invocation)
{
RealResource resource = invocation.InvocationTarget as RealResource;
if(resource.Corrupt)
{
//tidy up this instance, as it is corrupt
kernel.ReleaseComponent(resource);
RealResource newResource = kernel.Resolve<RealResource>(); //get a new one
//now what i would like to happen is something like this
//but this property has no setter, so this doesn't work
//also, i would like to know how to register RealResourceInterceptor as well RealResourceInterceptor
invocation.InvocationTarget = newResource;
}
invocation.Proceed();
}
}
Любые идеи, как реализовать что-то вроде моего класса RealResourceInterceptor, а также как настроить контейнер использовать его? Благодаря!
Использование замка объекта путь вперед –