如何提供类的特定实例,以作为我的WCF服务公开

时间:2010-08-13 05:57:38

标签: wcf

我有一个为现有应用程序实现插件的类。

我也将该类暴露为WCF服务。那部分到目前为止是有效的。我遇到的问题是我插入的应用程序创建了我想要使用的类的实例。

有没有办法将现有的类实例传递给WCF服务主机,以便作为服务端点公开?

我知道(或可以弄清楚)如何制作WCF服务的单例实例,但这仍然无法帮助我。据我所知,单例实例仍将由WCF创建和提供。

我已经考虑过其他方法,但如果可以使用,我宁愿选择这个方法。

一些代码。这是我的插件的构造函数:

// Setup the service host
var baseAddress = new Uri("http://localhost:8080/MyService/");
this.serviceHost = new ServiceHost(this.GetType(), baseAddress);

// Add our service endpoint
// Todo: Is there somewhere around here that I can provide an instance?
//   Maybe in behavior somewhere?
this.serviceHost.AddServiceEndpoint(
    typeof(ITheInterfaceMyClassDerivesFrom),
    new BasicHttpBinding(),
    ""
    );

// Add metadata exchange (so we see something when we go to that URL)
var serviceMetadataBehavior = this.serviceHost.Description.Behaviors
    .Find<ServiceMetadataBehavior>();
if (serviceMetadataBehavior == null)
    this.serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior());

this.serviceHost.AddServiceEndpoint(
    typeof(IMetadataExchange),
    new CustomBinding(new HttpTransportBindingElement()),
    "MEX"
    );

这是插件的OnStartedUp方法(由我插入的应用程序调用):

serviceHost.Open();

1 个答案:

答案 0 :(得分:6)

如果要执行此操作,则需要使用ServiceHost的其他构造函数 - 请查看http://msdn.microsoft.com/en-us/library/ms585487.aspx上的MSDN文档

public ServiceHost(
    Object singletonInstance,
    params Uri[] baseAddresses
)