2

これを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; 
    } 
} 

ドキュメントの右側のセクションにリンクしても問題ありません。コードを書く必要はありません(ただし、文句は言いません:))。工場の様子とレジストリコードを知りたいのですが。

4

2 に答える 2

3

この方法で試したことはありませんが、.WithName()メソッドを使用してインスタンス名を指定し、おそらくObjectFactory.GetNamedInstance()を介してインスタンスを取得できます。

別のアプローチ(私がうまく使用した)は、タイプマッピングとして機能する辞書を作成することです。そこでタイプを検索し、ObjectFactoryを介してそのタイプのインスタンスを取得します。

于 2009-08-05T14:35:08.353 に答える
0

登録に関しては、条件付きオブジェクト構築を使用したいと思います。

于 2009-08-05T16:02:37.513 に答える