Pregunta

Tengo una clase base que uso en llamadas de servicio WCF,

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

Dervo de él y cada vez que derivo tengo que agregar el [KnownType(typeof(MyDerivedClass))] atributo y cada vez que lo hago viola el Abrir cerrado principio. ¿Hay de todos modos para obtener clases como esta para su uso en WCF y no tener que agregar atributos a la clase principal cada vez?

¿Fue útil?

Solución

Puede usar un método estático que devuelva los tipos conocidos:

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

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

Ahora cree una clase estática conocida typeshelper que devuelva una matriz de tipos conocidos (escaneando ensamblajes para encontrar implementaciones de la clase base, por ejemplo ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top