公式サイトの例としては、チュートリアルABPは、アプリケーション層に直接IRpositoty <実体>で開始します。しかし、意志が右かというと、集約ルートアクセスは、集約ルートを通じてサービスを運営するストレージの最小単位であるエンティティである、その後、エンティティの追加および削除は、検索を変更することを集約ルートの場合、それは内部の集約ルートにする必要があります。
問題があることが、集約ルートエンティティを継承し,,彼はそれを保存する方法、倉庫ませんでしたか?
方法の一つ:データベースの移行が失敗したように、依存性注入、これは、動作しません。
1 パブリック クラス順序:AggregateRoot、IRepository <オーダー> 、ICreationAudited 2 { 3 [NotMapped] 4 プライベート IRepository <オーダー> _repository { 得ます。セット; } 5 公共注文(IRepository <オーダー> リポジトリ) 6 { 7 = _repository リポジトリ。 8 } 9 公共 長いですか?CreatorUserId { 取得します。セット; } 10 公共のDateTime CREATIONTIME { GET; セット; } 11 公衆リスト<のOrderItem>のOrderItem { 得ます。セット; } 12 パブリック 文字列備考{ 得ます。セット; } 13の パブリックアドレスアドレス{ 得ます。セット; } 14 15 公衆注文挿入(Orderエンティティ) 16 { 17 リターンエンティティ。 18 } 19 }
方法2:継承されたストレージ・インターフェース、
パブリック クラス順序:AggregateRoot、IRepository <注文> 、ICreationAudited { 公共 長いですか?CreatorUserId { 取得します。セット; } 公共のDateTime CREATIONTIME { 得ます。セット; } 公共の一覧<のOrderItem>のOrderItem { 取得します。セット; } パブリック 文字列備考{ 得ます。セット; } パブリックアドレスアドレス{ 取得します。セット; } 公共秩序を挿入(Orderエンティティ) { リターンエンティティ; } }
この問題は、それを呼び出すためにどのようにアプリケーション層のですか?アプリケーション層は、倉庫を出現させます。
方法3:効果重合ルートインタフェース、継承およびストレージ:Test2をコードしています。
パブリック クラスTest2を:Test2Repository、IAggregateRoot、ICreationAudited { 公共 長いですか?CreatorUserId { 取得します。セット; } 公共のDateTime CREATIONTIME { 得ます。セット; } パブリック 文字列備考{ 得ます。セット; } パブリックいるICollection <IEventData> DomainEvents => スロー 新しい(NotImplementedExceptionを) 公共 int型の Idを{ GET => スロー 新)(NotImplementedExceptionを。設定 =>スロー 新しいNotImplementedExceptionを(); } パブリック ブールIsTransient() { スロー 新しい)(NotImplementedExceptionします。 } }
その層であるためEF Test2Repository依存しないコアは、一番下に、これが仕事に行くされていない一方で、コンパイラは、過去にならないように。
方法4:これはポリマーの根であり、その後のオーバーラップは、ライン上の露出IORDERインターフェイスは、アプリケーション層であるIORDERインターフェース、ストレージインターフェース、およびこのインタフェースを実装します。
彼は後置の注文であることからIORDERは、依存アプリケーション層に注入することができます。
場合ジェネリックメソッド呼び出し及びタイプ(パラメータまたは戻り値)として渡されます
この実行は、保存されていません、
上記3が実行可能ではないが、以下の方法が有していてもよいです
成功する方法:それを使用して注入性。なお、重合は、注入枠への依存を根絶する必要があります。この例ではテストです
IocManager.Register <試験>(DependencyLifeStyle.Transient)。