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.