0

私は autofac を使用しており、resolve メソッドにパラメーターを渡すことができます。

microsofts DependencyResolver インターフェイスを使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

3

お気付きだと思いますが、IDependencyResolverはパラメーターを直接渡すことをサポートしていません。ただし、内部に Autofac があるため、基になるサービスにパラメーターを渡すことができるファクトリ デリゲートを解決できます。

var factory = dependencyResolver.GetService<Func<int, string, IService>>();
var service = factory(5, "42");

Func注:デリゲートまたは明示的に定義されたファクトリ デリゲートのいずれかを使用できます。詳細はこちら

ライフタイム スコープに関して: ファクトリ デリゲートは、要求されたサービスに「到達」できるスコープから解決する必要があります。MVC または WebApi がどのように見えるかをシミュレートするこのセットアップを検討してください。

var cb = new ContainerBuilder();
cb.RegisterType<X>().InstancePerMatchingLifetimeScope("http");
var application = cb.Build();
var request = application.BeginLifetimeScope("http");

このセットアップでは、Xサービスは http スコープでのみ利用可能になります。Xスコープから解決しようとapplicationすると、次のメッセージで失敗します。

インスタンスが要求されたスコープからは、「http」に一致するタグを持つスコープが表示されません。

requestスコープから解決すると、期待どおりに機能します。

var f = request.Resolve<Func<IX>>();
var x = f();
于 2012-08-10T13:12:27.297 に答える
0

一般的なアドバイスは、ファクトリを解決することです。解決する必要がある型のカスタム ファクトリ インターフェイスを定義するか (これが私の好みです)、デリゲートを解決します (これは Peter Lillevold が提案しているものです)。いずれにせよ、これは最適DependencyResolverではないため、コンテナーを (またはさらに言えば) 直接呼び出すべきではありません。

于 2012-08-10T13:24:25.387 に答える