Consente di considerare alcuni casi:In Castle Windsor, posso registrare un componente di interfaccia e ottenere un proxy dell'implementazione?
_windsor.Register(Component.For<IProductServices>().ImplementedBy<ProductServices>().Interceptors(typeof(SomeInterceptorType));
In questo caso, quando chiedo un IProductServices Windsor si procura l'interfaccia per intercettare le chiamate di metodo di interfaccia. Se invece faccio questo:
_windsor.Register(Component.For<ProductServices>().Interceptors(typeof(SomeInterceptorType));
quindi non posso chiedere Windsor a risolvere IProductServices, invece chiedo ProductServices e restituirà una sottoclasse dinamica che intercettare le chiamate metodo virtuale. Ovviamente la sottoclasse dinamica implementa ancora "IProductServices"
La mia domanda è: Posso registrare il componente Interface come il primo caso e ottenere il proxy della sottoclasse come nel secondo caso ?.
Ci sono due ragioni per me che vogliono questo:
1 - Poiché il codice che sta andando a risolvere non può conoscere sulla classe ProductServices, solo circa l'interfaccia IProductServices. 2 - Poiché alcune invocazioni di eventi che passano il mittente come parametro, passeranno l'oggetto ProductServices e nel primo caso questo oggetto è un campo sul proxy dinamico, non l'oggetto reale restituito da windsor. Vi faccio un esempio di come questo può complicare le cose: Diciamo che ho una collezione personalizzata che fa qualcosa quando i loro elementi notificare un cambiamento di proprietà:
private void ItemChanged(object sender, PropertyChangedEventArgs e)
{
int senderIndex = IndexOf(sender);
SomeActionOnItemIndex(senderIndex);
}
Questo codice avrà esito negativo se ho aggiunto un proxy di interfaccia, in quanto il il mittente sarà il campo nel proxy di interfaccia e IndexOf (mittente) restituirà -1.
lavorato molto bene, grazie. –