【发布时间】:2009-08-14 16:11:05
【问题描述】:
我有一个托管在 WAS 中的服务。我正在尝试使用依赖项注入此服务,但一直无法找到在哪里执行此操作。在 IIS 中托管的 WCF 服务中,您可以使用 application_onstart 事件来实例化城堡容器,但这在我的场景中不可用。所以,我正在尝试像这样创建一个自定义主机工厂:
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
container = new WindsorContainer();
container.Register(Component.For<IMyDependency>().ImplementedBy<MyDependency>());
DefaultServiceHostFactory.RegisterContainer(container.Kernel);
var service = container.Resolve(constructorString);
ServiceHost serviceHost = new ServiceHost(service, baseAddresses);
return serviceHost;
}
这适用于单例 WCF 服务,但是如何让它适用于每次调用?对于非单例服务,它期望将类型传递给 ServiceHost 构造函数,而不是实际的服务。但是,如果我这样做,那么当服务启动时,它只会查找无参数构造函数,而不是 DI 版本。
关于如何让这一切正常工作的任何想法?
谢谢
【问题讨论】:
标签: .net wcf castle-windsor