2010-03-15 39 views
3

我試圖集成了託管與內部IoC容器(autofac /春)是基於NetTcpBinding的應用。不幸的是,當它在WAS內部啓動時,並且由於它不是基於Http的應用程序,因此全局應用程序類中不會觸發任何事件。呈非HTTP激活 - 掛鉤應用程序啓動

我需要趕上應用程序域啓動,這樣我可以配置IoC容器。在WAS中託管時有沒有辦法做到這一點?

我已經看到了使用App_Code文件夾內的靜態類涉及可怕的事情,但我想的東西有點更容易測試和不太乾淨。

回答

0

您可以實現IInstanceProvider(見http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iinstanceprovider.aspx),並告訴WCF運行時通過服務行爲來使用它。

服務行爲可以用自定義主機,配置或與屬性進行配置。這裏,後者的一個例子:

public class DependencyInjectionServiceBehaviorAttribute : Attribute, IServiceBehavior 
{ 
    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
    { 
     foreach (var cdb in serviceHostBase.ChannelDispatchers) 
     { 
      var cd = cdb as ChannelDispatcher; 
      if (cd != null) 
      { 
       foreach (EndpointDispatcher ed in cd.Endpoints) 
       { 
        ed.DispatchRuntime.InstanceProvider = new MyServiceFactory(serviceDescription.ServiceType); 
       } 
      } 
     } 
    } 

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, 
      Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters) {} 
    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) {} 
} 
相關問題