Je cherche des informations sur l'utilisation et la configuration de windsor pour fournir un proxy dynamique permettant d'intercepter des appels vers une instance d'une autre classe.Utilisation de DynamicProxy comme motif décoratif dans un conteneur windsor
Ma classe représente une ressource qui devrait être conservée en tant qu'instance de longue durée par le conteneur pour des raisons de performances. Cependant, cette ressource peut parfois passer dans un état inutilisable et nécessite un renouvellement. Je voudrais que le conteneur gère cela, donc le code client ne doit pas. Je peux créer ma propre usine pour faire ceci, je voudrais savoir s'il y a une certaine fraîcheur d'enregistrement de Windsor pour le faire pour moi donc je ne dois pas créer la classe séparée d'usine :)
Voici un pseudo code pour démontrer le problème:
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();
}
}
Toute idée comment mettre en œuvre quelque chose comme ma classe RealResourceInterceptor, et aussi comment configurer le conteneur pour l'utiliser? Merci!
Utilisation de l'installation du château est la voie à suivre –