Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.608 Beiträge
 
#3

AW: .Net: Sichtbarkeit und neuer Name für bestehenden Typen

  Alt 3. Sep 2012, 18:19
So, nach dem Absenden kam mir eine Idee.

Beispiel:
Code:
/ In Deinem Assembly:
public class MyClass {
   public TypeFromOtherAssembly GetSomething() {
      return new TypeFromOtherAssembly();
   }
}
Das hier würde implizieren, dass jemand der MyClass aus Deinem Assembly verwendet, auch OtherAssembly referenzieren muss.
Vorausgesetzt, TypeFromOtherAssembly ist NICHT sealed, geht folgendes:

Code:
/ In Deinem Assembly:
public interface IMyCustomType {
   public string Foo { get; set; } // das ist ein Property von TypeFromOtherAssembly.. das gesamte öffentliche Interface des typs wird hier dupliziert
}

public MyCustomTypeWrapperForTypeInOtherAssembly: TypeFromOtherAssembly, IMyCustomType {} // einfache Ableitung von drüben, mit dem eigenen Interface

public class MyClass {
   public IMyCustomTyoe GetSomething() {
      return new MyCustomTypeWrapperForTypeInOtherAssembly();
   }
}
Somit hast Du den Typen von dem OtherAssembly in ein Interface gewrapped, das in Deinem Assembly definiert ist.
Die öffentlichen Member Deiner Klasse verwenden nun keine Typdefinitionen mehr aus dem anderen Assembly, daher ist eine Referenz darauf von aufrufendem Code nicht mehr notwendig.

Bei Bedarf kann aber immernoch jemand das andere Assembly referenzieren, und die Rückgabe Deiner Methode auf TypeFromOtherAssembly casten (du hast ja lediglich abgeleitet), und kann darauf normal weiter arbeiten. Die Kaspelung erlaubt Dir zudem auch noch, das ganze gescheit zu Unittesten.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat