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; 
    } 
} 

は結構です、あなたは(私は:)文句を言わないだろうが)私のためのコードを記述 する必要はありません。私は に工場がどのように見えるか、またレジストリコードを知りたいと思います。

答えて

3

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

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

+0

WithName()とGetNamedInstance()を使用すると機能します。既存のインスタンスとして返されたオブジェクトは考えていませんでしたが、オンデマンドインスタンスとして多くのことを理解してくれました。私はデバッグのトレースと読み込みを行っていますし、少し理解しています。 ご協力いただきありがとうございます。私は明らかにあまりにも新しいので、あなたの答えを投票することはできません。 –

関連する問題