我想提供如下服务:
[ServiceContract]
interface IMyService<T>
{
[ServiceOperation]
void Foo(T item);
}
我可以在运行时发现我的通用合约的所有参数的类型(使用一些属性装饰)并使用类似的东西:
typeof(IMyService<>).MakeGenericType(typeof(Contact))
我可以为合同和服务实现获得有界泛型类型。从运行时的基本配置开始,我还可以将端点添加到主机。更了解我感兴趣的所有数据合约,我可以为主机添加每个数据的DataContractResolver
挑战是托管服务。在编译时我不知道类型参数,但我可以在运行时找到它。如何扩展ServiceHost或ServiceHostBase以在其中注入服务类型:
MyService<Contact>
何时需要? ServiceHost无论如何只需要在运行时...
答案 0 :(得分:0)
你能否使用ServiceHostFactory?
答案 1 :(得分:-1)
我知道这篇文章很老但是对其他人来说: http://www.codeproject.com/Articles/290148/Pattern-for-Creating-Generic-WCF-Services
修改强> 链接中的一些代码语义:
[ServiceContract]
interface IBaseService<T> where T : class, INumber
{
[OperationContract]
string GetData(int value);
}
public class BaseService<T> : IBaseService<T>
where T : class, INumber
{
private T _num;
public BaseService(INumberFactory<t> numberFactory)
{
_num = numberFactory.Create();
}
public string GetData(int value)
{
var ret = value * _num.Get();
return ret.ToString();
}
}
public class NumberOne : INumber
{
public int Get()
{
return 1;
}
}
public class NumberTwo : INumber
{
public int Get()
{
return 2;
}
}
public interface INumber
{
int Get();
}
public class myServiceHostFactory<TService> : System.ServiceModel.Activation.ServiceHostFactory where TService : class
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = new ServiceHost(serviceType, baseAddresses);
host.AddServiceEndpoint(typeof(TService), new NetTcpBinding(), "");
return host;
}
}