1

共有オブジェクトが要求ごとのオブジェクトへの参照を必要とするアプリケーションがあります。

共有: エンジン
                | |
要求ごと: IExtensions()
                | |
             リクエスト

IExtensionsのコンストラクターに直接注入しようとするとEngineLazy(Of IExtension)「インスタンスが要求されたスコープから [要求] に一致するスコープが表示されません」というメッセージが表示されます。each をインスタンス化しようとすると例外が発生しますIExtension

HttpRequestScoped インスタンスを作成し、それを共有インスタンスに挿入するにはどうすればよいですか?

Requestのファクトリに設定する(したがって、に注入Engineする)ことは良い習慣と見なされRequestFactoryますか?

4

1 に答える 1

1

共有ライフタイムの要件により、Engineリクエスト スコープの拡張機能を挿入することはできません。あなたが持つことができるのは、現在のリクエストスコープから拡張機能のコレクションを積極的に解決するエンジンのメソッドまたはプロパティです。

まず、Engineコンストラクターの依存関係を見てみましょう。

public class Engine
{
    public Engine(..., Func<IExtensions> extensionsPerRequest) 
    {
        _extensionsPerRequest = extensionsPerRequest;
    }


    public IExtensions Extensions
    {
       get { return _extensionsPerRequest(); }
    }
 }

次に、Autofac 登録で:

builder.Register<Func<IExtensions>>(c => RequestContainer.Resolve<IExtensions>());
于 2010-04-08T14:11:18.717 に答える