Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Provide ServiceKnownType during runtime?

I've got a working WCF interface using more than 100 ServiceKnownType in the contract like this:

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

Is there any way to provide these ServiceKnownTypes during runtime?
It is not only error-prone and tedious to add all these ServiceKnownTypes in the source, it keeps my assemblies tied together in a way I don't like (I'd like to be able to extract these types into subassemblies to decouple them, but can't since the Service needs to list all the known types).

like image 759
Sam Avatar asked Jul 16 '26 18:07

Sam


1 Answers

Yes there is.

ServiceKnownTypeAttribute lets you specify a method name as the first parameter, followed by a parameter containing the System.Type implementing that method.

The specified method must be both static and public, and have a return type of IEnumerable.

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

see also http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

like image 88
Willem van Rumpt Avatar answered Jul 18 '26 08:07

Willem van Rumpt