これをstructuremapグループにも投稿しました。先週、structuremapを使い始めたばかりで、実際に掘り下げています。
簡単なものが欠けていると思います。
工場内でSMを使用して、次のコードを模倣しようとしています。ファクトリクラスにコンテナの依存関係があっても大丈夫です。このスレッドのコンセンサスは、これが正しいアプローチであるように思われました:http: //www.codeplex.com/unity/Thread/View.aspx?ThreadId=29697。より良い方法があれば、私はこれを達成するための他の方法を聞くことを歓迎します。
基本的に、私のファクトリのCreateメソッドは列挙値を受け取り(実際の型である可能性がありますが、いずれにしてもコンテナによって制御されるものではありません)、適切なインスタンスを返す必要があります。返品タイプはSMによって管理されることに注意してください。多くの(!)が存在する可能性があるため、すべての依存関係をファクトリのCtorに入れたくありません。
public class PreSaveActionFactory : IPreSaveActionFactory
{
public IPreSaveAction Create(MyEnumType enumType)
{
IPreSaveAction action;
switch (enumType)
{
case MyEnumType.Value1:
//imagine this has 3 Ctor arguments
action = new Value1PreSaveAction();
break;
case MyEnumType.Value2:
//and imagine this has 4 completely different Ctor arguments
action = new Value2PreSaveAction();
break;
default:
throw new NotSupportedException();
}
return action;
}
}
ドキュメントの右側のセクションにリンクしても問題ありません。コードを書く必要はありません(ただし、文句は言いません:))。工場の様子とレジストリコードを知りたいのですが。