2016-07-26 30 views
2

Zum Beispiel lassen Sie uns sagen, dass ich eine Schnittstelle definiert haben, wie folgt:Kann ein von Castle DynamicProxy generierter Proxy Elemente als explizite Schnittstellenimplementierungen implementieren?

public interface IWhatever 
{ 
    string Text { get; set; } 
} 

Und ich es in einem mixin implementieren:

public class WhateverMixin : IWhatever 
{ 
    string IWhatever.Text { get; set; } 
} 

Wenn ich einen Proxy irgendeiner bestimmten Klasse zu bauen, die ganze explizit implementiertes Schnittstellenmitglied erscheint als implizit implementiert, so dass es veröffentlicht veröffentlicht wird.

Wissen Sie, ob es eine Option gibt, die ich Castle DynamicProxy geben kann, um die Implementierung einer Schnittstelle mit expliziten Implementierungen zu erzwingen?

Antwort

2

Leider scheint DynamicProx keine Optionen dafür zu haben. In den Klassen ProxyGenerationOptions oder MixinData gibt es keine solche Einstellung. Wenn Sie sich den Code ansehen (beginnend mit MixinContributor, der zu MethodGenerator führt), können Sie sehen, dass der Name und die Attribute (Sichtbarkeit usw.) einfach von der Schnittstellenmethode kopiert werden .

+0

Nur neugierig ... Kennen Sie einen anderen Proxy-Generator, der diese Funktion bereits implementiert hat? –

+0

Nein, ich kenne keine anderen Proxy-Generatoren, obwohl Sie wahrscheinlich die [TypePipe] (http://typepipe.codeplex.com/) verwenden könnten, um Ihre eigenen zu erstellen. Alternativ können Sie, wenn Sie nur Mixing-Funktionen benötigen, re-motion [re-mix] (https://remix.codeplex.com/) ausprobieren - diese Bibliothek implementiert Mixink-Schnittstellen explizit standardmäßig. (Beachten Sie, dass ich einer der ursprünglichen Autoren beider Bibliotheken bin.) –

+0

Nun, eine andere Alternative wäre die Verwendung von IL Weben mit PostSharp. Am Ende des Tages, wenn Sie wissen möchten, was ist der Hintergrund dieser Q & A ... es ist wegen einiger Open Source, die ich im letzten Jahr entwickelt habe: http://matiasfidemraizer.com/trackerdog –