0

データ サービスを作成し、Autofac WCF 統合を使用してデータ モデルへの依存関係を解決しているときに問題が発生しました。登録の形式は次のとおりです。

    builder.RegisterType<MyService>()
        .InstancePerDependency();
    builder.RegisterType<MyModel>()
        .InstancePerLifetimeScope();

ここで、MyModel は MyProvider に依存しています

    public MyModel (MyProvider provider)
    {
        _provider = provider;
    }

アプリケーションに関連する理由で、このプロバイダーが Request スコープに登録されているため、問題が発生します。

    builder.RegisterType<MyProvider>() 
        .As<MyProvider>() 
        .InstancePerMatchingLifetimeScope(RequestContextTag); 

明らかなように、リクエスト コンテナーは ASP.Net リクエストごとに作成および破棄されます。

ただし、MyModel と MyService は Application スコープに登録されます。私は2つの可能な解決策を思いつきました-

  1. プロバイダーのスコープを変更する (アプリのほぼ全体を改造する必要があるため、不可能)
  2. サービスとモデルをリクエストスコープに登録します(これが可能かどうかはわかりません。可能であれば正しいです)

アドバイス/提案をいただければ幸いです。ありがとう。

4

1 に答える 1

1

「リクエストスコープに登録された」というステートメントから、ASP.NETの「リクエスト」スコープを介して構成されたものを意味していると思いますContainerProviderか?(そうでない場合は明確にしてください。)

要求の有効期間はASP.NET要求でのみ表示され、WCF要求では表示されません。WCFは別のパイプラインを使用します。

MyProviderおそらくあなたが望むことを達成する方法があるので、登録のいくつかの詳細を投稿してください。

リクエストごとのコンポーネントがASP.NETの「Http」タイプに依存していないことを確認してください。これは、Autofacが使用されているかどうかに関係なく、WCFリクエスト中には使用できません。

お役に立てれば!

ニック

于 2010-06-19T22:27:58.867 に答える