我正在寻找有关使用和配置 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 类,以及如何配置容器以使用它?谢谢!