3

着信要求の HTTP ヘッダーの値に基づいて、サービスの依存関係を解決する必要があります。

次のようなファクトリメソッドを登録しようとしました:

container.Register(c => GetDependencyForRequest(c.Resolve<IHttpRequest>()));

また、私は試しました:

container.Register(c => GetDependencyForRequest(c.Resolve<IRequestContext>()));

ただし、どちらも s をスローしResolutionExceptionます。

どの実装を使用するかを決定する際に、サービスに負担をかける必要はありません。IDependencyコンストラクターに を入れて、コンテナーに解決させてもらいたいだけです。

これを行う方法はありますか?または、これについて別の方法がありますか?

4

2 に答える 2

2

IoC コンテナーを介してそれを行う方法があるかどうかはわかりません。考えられる解決策は、Http ヘッダーに基づいてコンストラクターで IDependency を「新しく」できる Service の独自のサブクラスを作成することです。以下は、アイデアを提供するための疑似コードです。お役に立てれば。

public abstract class MyServiceBase : Service
{
    private Dictionary<string, Func<IDependency>> Dependencies = new Dictionary<string, Func<Dependency>>()
                                                                    {
                                                                        {"header1", () => new Dependency()},
                                                                        {"header2", () => new Dependency()}
                                                                    };

    public IDependency Dependency { get; set; }

    protected MyServiceBase()
    {
        this.Dependency = this.Dependencies[this.RequestContext.GetHeader("headerName")]();
    }
}
于 2013-02-14T16:18:08.983 に答える
1

答えは私が思っていたよりもはるかに簡単でした:

container.Register(c => FindDependencyForRequest(HttpContext.Current.ToRequestContext()));
于 2013-02-14T17:54:03.417 に答える