WAS Non-HTTP активация - перехват запуска приложения - PullRequest
3 голосов
/ 15 марта 2010

Я пытаюсь интегрировать приложение на основе netTcpBinding, размещенное внутри WAS, с контейнером IoC (autofac / spring). К сожалению, когда он запускается внутри WAS и из-за того, что он не является приложением, основанным на Http, события внутри класса Global не генерируются.

Мне нужно отследить запуск домена приложения, чтобы я мог настроить контейнер IoC. Есть ли способ сделать это при хостинге в WAS?

Я видел ужасные вещи, связанные с использованием статических классов внутри папок App_Code, но я хотел бы что-то более тестируемое и не столь грязное.

1 Ответ

0 голосов
/ 19 мая 2014

Вы можете реализовать 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) {}
}
...