0

私は、次のPOCOエンティティを持っていると仮定すると:私は上の計算されたプロパティを実装する必要が何らかの理由でユニット - 計算されたプロパティ

public class SomeEntity 
{ 
    public int SomeProperty { get; set; } 
} 

と、次のリポジトリその後

public class SomeEntityRepository 
{ 
    Context _context; 
    public SomeEntityRepository(Context context) 
    { 
     _context = context; 
    } 

    public List<SomeEntity> GetCrazyEntities() 
    { 
     return _context.SomeEntities.Where(se => se.SomeProperty > 500).ToList(); 
    } 
} 

好きSomeEntity:

class SomeEntity 
{ 
    ... 
    public List<SomeEntity> WellIDependOnMyOnRepositry() 
    { 
     ... 
     return theRepository.GetCrazyEntities().Where(se => se.SomeProperty < 505).ToList(); 
    } 
} 

がどのように私はレポを意識することPOCOエンティティを扱うことができます適切なUnitOfWork実装を使用していますか?

私はのIoCと依存性注入に見てきたが、私はバットの外にそれを理解するには少しあまりにも愚かです。

いくつかの啓発?

+1

..だからexaclyあなたのエンティティの内部でリポジトリへの参照を保持したくなる「何らかの理由」は何か?それはSomeEntityRepositoryに属し、SomeEntity – surfen

+0

はうん、この例では、私が持っていると私は急いで仕事を残していた本当の問題を反映していないではないように今、WellIDependOnMyRepository方法が見えます。あなたが正しいです。より正確なコードを使用して私の質問を編集します。私が帰宅したら、より良い答えを得ることができると確信しています。 –

答えて

1

あなたのコメントにあなたが言及更新を読んでなくても、私はあなたが、ドメインサービスオブジェクトのいくつかの種類にリポジトリからクレイジーエンティティを取得何が必要な計算を行うと、あなたのエンティティに結果を割り当てるべきであると言うことができます。あなたは(私たちのIoCコンテナなしで)依存性の注入に見たい場合は

また、理想的には、リポジトリは、インタフェースを実装する必要があります。

次のような何か:

public interface ISomeEntityRepository 
{ 
    List<SomeEntity> GetCrazyEntities(); 
} 

public class SomeEntityRepository : ISomeEntityRepository 
{ 
    // ... Implementation goes here. 
} 

public class MyDomainService 
{ 
    private readonly ISomeEntityRepository Repository; 

    public MyDomainService(ISomeEntityRepository repository) 
    { 
     Repository = repository; 
    } 

    public SomeEntity WorkWithCrazyEntity() 
    { 
     var something = Repository.GetCrazyEntities(); 

     var result = //.... do all sort of crazy calculation. 

     var someEntity = new SomeEntity(); 

     someEntity.CalculatedProperty = result; 

     return someEntity; 
    } 
} 

が、これはあなたにいくつかのアイデアを与える願っています。たぶんあなたの質問を更新した後、私はあなたが必要としているものの文脈でより良くなることができます。

よろしくお願いいたします。