Tuve el mismo problema en un servicio de WCF e hice el siguiente truco "menos atroz" para evitar la limitación de tipo conocido. Estoy delineando solo por el hecho de mostrar opciones alternativas, depende de usted decidir si es mejor o no.
al inicio del servicio, carga a través de la reflexión de los tipos desee exponer. P.ej. si todas las entidades expuestas a WCF derivan de una base abstracta común (o más), cargue todos los tipos del ensamblaje en el que se supone que se encuentran. Guarde en caché estos tipos estáticamente por razones de rendimiento.
Crear un método estático que devuelve dichos tipos en caché, con la siguiente firma: public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)
Marca la interfaz WCF con el siguiente atributo [ServiceKnownType("GetKnownTypes", typeof(StaticClassThatCachesTypes))]
Esto debería darle automática la exposición de todos los tipos que son o será derivado de la (s) clase (s) base de su elección, siempre y cuando el (los) desarrollador (es) futuro (s) las coloque (n) en el correcto como sembly
Gracias por esto. Realmente no escala si hay múltiples tipos de base para diferentes tipos de contratos (tendrá que tener un helper estático para cada base) pero saca el elemento humano. :) – Joe
@Joe: no necesariamente.Si tiene varias clases base, no hay nada que le impida cargar todos sus tipos derivados de una vez en el paso 1. GetKnownTypes debe devolver una lista de tipos. Las limitaciones reales son que debe conocer todas sus clases base (y adaptar el cargador de tipos cuando agrega una nueva), y debe saber dónde se encuentran. –
Aceptando esto como una solución decente. Sería bueno tener algo un poco más inteligente a nivel de lenguaje/compilación ... – Joe