2010-06-15 4 views
3

У меня есть рабочий интерфейс WCF, используя более чем 100 ServiceKnownType в договоре, как это:Предоставить ServiceKnownType во время выполнения?

[ServiceKnownType(typeof(RowUser))] 
[ServiceKnownType(typeof(RowRegion))] 
[ServiceKnownType(typeof(RowDocument))] 
[... loads more ...] 
[ServiceContract(SessionMode = SessionMode.Required)] 
public interface IServiceBrowse : IDisposable 
{ 
    [OperationContract] 
    void Insert(Row satz); 
} 

Есть ли способ, чтобы обеспечить это ServiceKnownTypes во время выполнения?
Не все, что связано с ошибкой и утомительно, чтобы добавить все эти ServiceKnownTypes в исходный код, он связывает мои сборки, как мне не нравится (я хотел бы иметь возможность извлекать эти типы в узлы для развязки они не могут, поскольку служба должна перечислить все известные типы).

ответ

10

Да, есть.

ServiceKnownTypeAttribute позволяет указать имя метода в качестве первого параметра, за которым следует параметр, содержащий System.Type, реализующий этот метод.

Указанный метод должен быть как статическим, так и общедоступным и иметь возвращаемый тип IEnumerable.

[ServiceKnownType("RegisterKnownTypes", typeof(Services))] 
public class Services : IServices 
{ 
    static public IEnumerable<Type> RegisterKnownTypes(ICustomAttributeProvider provider) 
    { 
    } 
} 

смотри также http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

+1

BTW, вспомогательный класс услуг не имеет ни должны быть открытыми и не наследуют IServices. – Sam