私のソースはhttps://github.com/tonyeung/generic-repoにあります
さまざまなプロジェクトで参照できる汎用リポジトリを作成したいと考えています。私が見たほとんどの一般的なリポジトリの実装では、それが困難になっています。私は偶然http://blog.damianbrady.com.au/2012/07/24/a-generic-repository-and-unit-of-work-implementation-for-entity-framework/に出くわし、それがうまくいくことを発見しました私が考えていることのために。私のプロジェクトのそれぞれは、それに定義されたコンテキストを持つことができます。その後、汎用リポジトリ プロジェクトまたは dll を参照し、コンテキストを渡すだけで準備完了です。
私が理解しようとしている唯一のことは、解決する必要があるネストされた依存関係がいくつかあるため、構造マップをどのように配線するかです。残念ながら、このブログでは、汎用リポジトリを使用して依存性注入を実装する方法については実際には触れていません。実装をいじってみましたが (上記の git ハブ リポジトリを参照)、構造マップの構成中に何か問題が発生しています。
依存関係は次のように機能します。リポジトリはコンストラクターでコンテキストを取得し、コンテキストは接続文字列を取得します。コンストラクターのパラメーターはすべて、IType を Type にマップする既定の規則に一致するインターフェイスです。自動登録があるので、コンテキストの登録を明示的に定義して、app.config から接続文字列を取得するように structuremap に指示するだけでよいと思います。
ただし、構造マップは、思ったように登録を行うことができません。
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily Generic_Repository_Test.IGenericRepository`1
[[ViewModel.Customer, ViewModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]],
Generic Repository Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
登録コード
//This is commented out since it should not be necessary.
//I tried to put this in for grins
//and see if it would resolve the issue but it doesn't.
//For<IGenericRepository<Customer>>().Use<GenericRepository<CustomerContext, Customer>>();
For<ICustomerContext>()
.Use<CustomerContext>()
.Ctor<string>("connectionString")
.EqualToAppSetting("ConnectionString");
//I've tried moving scan to the top but it didn't make a difference
Scan(x =>
{
x.AssembliesFromApplicationBaseDirectory();
x.WithDefaultConventions();
});