2009-10-08 47 views
3

我創建了一個簡單的自定義ServiceHost,它從ServiceHost繼承並覆蓋方法InitializeRuntime。WCF:在我的app.config/web.config中爲我的wcf服務使用我的「自定義」ServiceHost?

我如何改變我的app.config/web.config中使用自定義服務主機,所以我重寫InitializeRunTime是執行..

我看到像behaviorConfiguration等,但沒有明顯的配置文件屬性在那裏我可以強制使用我的自定義的ServiceHost

我的ServiceHost很簡單: -

public class UnityServiceHost : ServiceHost 
{ 
    protected override void InitializeRuntime() 
    { 

     //DO MY UNITY INJECTION HERE 
     //Console.WriteLine(""); 
     base.InitializeRuntime(); 
    } 


} 

任何幫助非常感激。

感謝

回答

2

奧蘭·丹尼森介紹瞭如何做到這一點使用Spring.NET:http://orand.blogspot.com/2006/10/wcf-service-dependency-injection.html

總之,您將使用WCF的「行爲注入」提供您的DI容器創建的服務的一個實例。

1)創建getInstance方法返回由你的容器創建的服務對象定製IInstanceProvider實現:

public object GetInstance(InstanceContext instanceContext, Message message) 
    { 
     return _container.Resolve(_serviceType); 
    } 

2)實現自定義IServiceBehaviour,增加了自定義IInstanceProvider每個端點配置。

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
    { 
     foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers) 
     { 
      ChannelDispatcher cd = cdb as ChannelDispatcher; 
      if (cd != null) 
      { 
       foreach (EndpointDispatcher ed in cd.Endpoints) 
       { 
        ed.DispatchRuntime.InstanceProvider = 
         new YourCustomInstanceProvider(serviceDescription.ServiceType); 
       } 
      } 
     } 
    } 

3)在您的自定義服務主機,覆蓋OnOpening並添加自定義的服務行爲

protected override void OnOpening() 
    { 
     this.Description.Behaviors.Add(new CustomServiceBehavior()); 
     base.OnOpening(); 
    } 

注意,你可能必須通過向下傳遞您的UnityContainer實例的IInstanceProvider,以便它可以做解決。

0

如果你正在舉辦自己的服務(而不是使用IIS或WAS),你只需簡單地創建UnityServiceHost而不是常規的ServiceHost的。

如果您使用的是IIS或WAS,write a ServiceHostFactory

+0

實際上,我將使用IIS作爲主機容器,但對於TDD,我希望能夠直接在WCF服務類上使用TDD,但當然我在TDD調用服務時需要注入某些方法的對象失敗.. 這很容易與Global.asax創建SessionStart並注入值,但我想一個通用的解決方案,以便無所謂主機是IIS,TDD或什麼將會注入的值 – 2009-10-08 15:21:59

0

你需要創建一個自定義ServiceHostFactory並用它來創建你UnityServiceHost。您指定要在SVC文件中使用的ServiceHostFactory。有關SVC語法,請參閱MSDN docs

+0

感謝您的答覆,但TDD呢,我想測試WCF服務類而不是託管的SVC ......我只注入了什麼注入對象,我將在wcf服務中使用 - 我不想注入任何服務等等 – 2009-10-08 15:19:51

相關問題