Provide ServiceKnownType during runtime?

怎甘沉沦 提交于 2019-12-06 08:15:26

问题


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).


回答1:


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



来源:https://stackoverflow.com/questions/3044078/provide-serviceknowntype-during-runtime

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!