2009-08-14 102 views
3

我有一个在WAS中托管的服务。我试图用依赖注入这个服务,但一直在寻找在哪里做这件事。在IIS中托管的WCF服务中,您可以使用application_onstart事件来实例化城堡容器,但这在我的方案中不可用。所以,我想创建一个自定义的主机厂家,像这样:WCF Castle Windsor和WAS

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版本。

关于如何使这一切工作的任何想法?

感谢

回答

2

WCF Facility会做到这一点(和更多)为您服务。

+0

谢谢,我已经得到了WCF Facility与在IIS中激活的WCF服务一起工作,但不是WAS。在过去,我只是将服务连接到Wcf工厂,然后在global.asax中添加容器。但是,我无法用WAS将global.asax中的容器连接起来,那么如何将它们放在一起呢? – 2009-08-17 07:43:32

+0

答案是勾入AppInitialize() 谢谢 – 2009-08-17 11:15:09

+0

很酷,很高兴你让它工作。如果您对城堡有任何疑问,最好在讨论列表中询问:http://groups.google.com/group/castle-project-users – 2009-08-17 12:19:54