2009-08-14 141 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