WAS非HTTP激活 - 挂钩应用程序启动

时间:2010-03-15 11:18:55

标签: wcf was nettcpbinding

我正在尝试将托管在WAS中的基于netTcpBinding的应用程序与IoC容器(autofac / spring)集成。不幸的是,当它在WAS内部启动并且由于它不是基于Http的应用程序时,在Global应用程序类中没有触发任何事件。

我需要捕获应用程序域启动,以便我可以配置IoC容器。在WAS托管时有没有办法做到这一点?

我已经看到了在App_Code文件夹中使用静态类的可怕事情,但我想要一些更可测试的东西,而不是那么脏。

1 个答案:

答案 0 :(得分: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) {}
}