2009-07-28 8 views
2

Entity FrameworkオブジェクトであるエンティティEntityAを持っている場合、作成時に異なる動作をどのように注入するのですか?ビヘイビアをEntity Frameworkオブジェクトコンストラクタに挿入するにはどうすればよいですか?

これらの特定のエンティティは、いくつかの計算に異なる戦略を利用する必要があります。オブジェクトを作成するときにDIを使用して正しい戦略を提供したいと思います。傍受する方法はありますか?

投稿日: 私は以下の2つのパターンを考えています(ポイントを取得するには擬似)。あなただけの部分クラスに1を追加できるように

 public partial class Entity 
    { 
      public Entity(ICalculationStrategy strategy) 
      { 
       _calcStrategy = strategy; 
      } 
    } 

public partial class Entity 
     { 
       public Entity(ICalculationFactory factory) 
       { 
        _calcStrategy = factory.ProvideCalculator(this); 
       } 
     } 
+0

これらの2つのパターンは大きく異なりません。この特定のインスタンスで使用される戦略を決定する要因は何になっているのかはまだわかりません。 – Thorarin

+0

それは難しい部分です。今行われる方法は、クラス名に一致するEntity属性(name)を使用して、正しい電卓インスタンス(Activator)を動的に作成することです。この時点でこれについて間違って考えているのかどうかはわかりません。 – Christian

答えて

1

EntityObjectsは、その生成されたコードで定義されたすべてのコンストラクタを持っていない:

public partial class MyEntity 
{ 
    public MyEntity() 
    { 
     // Whatever logic to determine your strategy 
    } 
} 

をあなたは違った自分の計算をやって行くだろうか、に依存します何が正確にしようとしています。何らかの理由でコンストラクタに余分なパラメータを渡したいと思うなら、私はできないと思いますので、そのことを回避する必要があります。

また、Entity Frameworkでinheritanceを見ましたか?いくつかの列/プロパティの値に基づいて、abstractおよび/またはvirtualのメソッドとプロパティを持つ部分クラスを使用して、さまざまなビジネスロジックのさまざまな実装を持つことができる別のサブクラスを使用することができます。

もちろん、オブジェクトがインスタンス化された後に動作を変更することはできますが、私はあなたが望むものではないと感じますか?静的な方法で工場にアクセスできますか?静的なクラス、メソッド、またはプロパティのいずれか?

MyFactory.Current = new MyFactory(parameters); 

public partial class MyEntity 
{ 
    public MyEntity() 
    { 
     _calcStrategy = MyFactory.Current.ProvideCalculator(this); 
    } 
} 
+0

デフォルトのno paramsコンストラクタ以上のものが必要です。基本的に私は建設時間や工場で戦略を注入してエンティティが適切な戦略を要求できるようにしたいと考えています。たぶん私は範囲を広げ、私がしようとしていることを説明します。戦略の方向性が正しくない – Christian

+0

この場合、すべてのエンティティがわずかに異なる戦略ロジックを持つため、継承は機能しません。 – Christian

2

計算が実行された時点で戦略を引き継ぐことはできますか?

myEntity.Calculate(myStrategy); 

戦略とエンティティの関係を逆転させるのはどうですか?

myStrategy.Calculate(myEntity); 

または、プロパティ注入を使用した戦略ですか?

+1

完全に関係を反転させることは、私が考えていることです。私はそれについてより多く考えるとその方向を傾け始めています。私の場合、実際には、全体のプロセスに関わる複数のステップ/戦略があります。 DDDサービスオブジェクトがここに行く方法かもしれません。それは、各戦略の生成およびすべてのエンティティについて同一である全体的なワークフローを管理することができます。 私を悩ます唯一のことは、エンティティ自体が特定の戦略に縛られていることです。再利用があるかどうかはわかりません。各戦略には、必要な特定のデータセット/パラメータがあります。何か案は? :) – Christian

+0

パラメタによると、私は本当に定数を意味します。すべての戦略は同じ定数を使用しませんが、重複があります。 – Christian

関連する問題