방금이 작업을 수행 했으므로 인터페이스에 KnownTypesAttribute를 추가해야합니다.
[ServiceContract]
[ServiceKnownType(typeof(MyContract1)]
[ServiceKnownType(typeof(MyContract2)]
[ServiceKnownType(typeof(MyContract3)]
public interface IMyService
{
[OperationContract]
object TakeMessage();
[OperationContract]
void AddMessage(object contract);
}
구현시 사용자의 DataContracts 중 하나인지 확인하기 위해 유형을 확인해야합니다. 당신이 계약을 많이 가지고있는 경우
편집
, 당신은 KnownTypes에 추가 반사를 사용할 수 있습니다. 이것은 그 일을 훨씬 청소기 방법입니다
[ServiceContract]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypeHelper))]
public interface IMyService
{
[OperationContract]
object TakeMessage();
[OperationContract]
void AddMessage(object contract);
}
로
internal static class KnownTypeHelper
{
public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider = null)
{
var types = Assembly.GetExecutingAssembly().GetTypes().Where(a => a.Namespace == "Company.Path.To.DataContractsNamespace").ToArray();
return types;
}
}
그런 다음 당신은 당신의 인터페이스를 선언 할 수 있습니다.
아! 알겠습니다 ... 이것은 내가 찾고 있던 것입니다 ... 많은 분들이 그렇게 빠른 응답을 주셔서 감사합니다. – user1312242
OMG !! 신난다. 이것은 less & 더 많이 쓰는 것처럼 들린다. 그러나 나는 반사가 조금의 성능 저하를 요구한다고 생각한다. ... – user1312242