3

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

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

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

4

1 回答 1

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) {}
}
于 2014-05-19T09:27:04.640 回答