6

これが結構必要みたいです。

いくつかの引数を取るコンストラクタを持つクラスがあるとしましょう。これらのいくつかは、コンポーネントを登録することで解決できます。ただし、残りは実行時に作成されるインスタンスです (例: データベースからエンティティをフェッチする)。

Autofac はこれらの状況に適切に対処できますか? または、私の設計は最適ではありませんか?

明確にするために、次のようなコンストラクターを持つクラスがあります。

public MyClass(IService1 service1, IService2 service2, Data1 data1, Data2 data2)
{
//...
}

そして、私はこのようなことをしたいと思います:

container.Resolve<MyClass>(data1, data2);

4

2 に答える 2

10

Autofac コンテナにファクトリ メソッドを登録することで、これをエレガントに処理できます。ファクトリ メソッドを解決し、それを使用してランタイムの依存関係を持つインスタンスを作成します。これは、デリゲートまたはカスタム ファクトリ タイプを登録して解決することで、自分で行うことができます。ただし、Autofac はデリゲート ファクトリを明示的にサポートしています。

あなたのデザインについてコメントするのに十分な情報がありません。私はそれをあなたに任せます:)

于 2011-06-07T13:21:47.610 に答える
4

あなたのデザインは最適ではないと思います。

あなたは物事に混ざっているようです。依存性注入 (コンテナーを使用) は、主にサービス コンポーネントを他のコンポーネントに注入するために使用する必要があります。エンティティのようなものを注入しないでください。エンティティの寿命を管理するのはコンテナ次第ではないためです。代わりに、リポジトリなどのエンティティを管理できるサービスを注入します。議論のトピックですが、作業単位を注入するのではなく、作業単位を作成するためのファクトリを注入します。このようにして、アプリケーションは作業単位の有効期間を明示的に管理します。

于 2011-06-07T19:12:23.693 に答える