Domanda

Ho una classe di base che uso in chiamate di servizio WCF,

[KnownType(typeof(MyDerivedClass))]
public abstract class MyBaseClass {
   //some properties
}

I ricavare da esso e ogni volta che mi traggo devo aggiungere l'attributo [KnownType(typeof(MyDerivedClass))] ed ogni volta che lo faccio mi violare la principio aperto / chiuso . Esiste un modo per classi Nuovo campo come questo per l'uso in WCF e non c'è bisogno di aggiungere attributi alla classe padre ogni volta?

È stato utile?

Soluzione

È possibile utilizzare un metodo statico che restituirà tipi conosciuti:

[DataContract]
[KnownType("GetKnownType")]
public class MyBaseClass
{
    //some properties

    private static Type[] GetKnownType()
    {
        return KnownTypesHelper.GetKnownTypes<MyBaseClass>();
    }
}

Ora creare una KnownTypesHelper classe statica che restituisce un array di tipi noti (tramite scansione assiemi di trovare implementazioni di classe base per esempio ...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top