从代码中配置WCF和StructureMap ServiceHostFactory

时间:2012-08-14 20:35:25

标签: wcf structuremap

我正在创建一个自定义的ServiceHost对象并从代码中进行配置。我的服务是使用InstanceContextMode.Single和ConcurrencyMode.Multiple并托管在Windows服务中。

正如许多博客/文章(here)所述,跨实例共享StructureMap容器​​需要使用自定义InstanceProvider,ServiceBehavior和ServiceHostFactory。

我的初始化代码如下所示。我不使用配置文件。

var baseAddress = ConfigurationManager.AppSettings["BaseAddress"];
var port = Int32.Parse(ConfigurationManager.AppSettings["Port"]);

Host = new MyServiceHost(typeof(MediaFileServicePrivate), new Uri(string.Format(baseAddress, port)));

var binding = new NetTcpBinding();
Host.AddServiceEndpoint(typeof(IMediaFileServicePrivate), binding, string.Format(baseAddress, port));

如何告诉服务使用我的自定义服务主机工厂?我可以找到的所有示例都从配置文件中配置它。

ServiceHostFactory仅用于IIS / WAS托管方案吗?如果是这样,我如何将SM用于自托管的InstanceContextMode.Single服务?

2 个答案:

答案 0 :(得分:0)

这没有得到回答吗?基本上你告诉它在wcf标记中使用你的servicefactory

<%@ ServiceHost Language="C#" Debug="true" Service="WcfWithDI.Service1" CodeBehind="Service1.svc.cs" Factory="WcfWithDI.MyServiceFactory"%>

我这里有一个示例项目,所有项目都与自定义提供程序(和结构图)相连 https://github.com/billCreativeD/WCF_With_DI

答案 1 :(得分:0)

不幸的是,说“服务使用工厂”是没有意义的。您可以使用Ninject工厂来创建服务:

var factory = new NinjectServiceHostFactory();

var address = new Uri(_baseAddress, path);
ServiceHostBase host = factory.CreateServiceHost(typeName, new[] {address});

var binding = new NetTcpBinding();
host.AddServiceEndpoint(typeof(TheType), binding, string.Format(baseAddress, port));

.svc文件中的指令用于告诉.NET如何实例化您的服务。