3

WAS 内でホストされている netTcpBinding ベースのアプリケーションを IoC コンテナー (autofac/spring) と統合しようとしています。残念ながら、WAS 内で開始すると、それが Http ベースのアプリケーションではないため、グローバル アプリケーション クラス内でイベントが発生しません。

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 に答える