Unityを使用して、毎回新しいインスタンスを使用してリポジトリにデータコンテキストを自動的に注入しようとしています..、私の考えは、新しいデータコンテキストが注入されるたびに確実にすることです
現在、リポジトリの作成に失敗しています。MyDataContext を解決できないと思います
「リポジトリ」(以下を参照) にコンストラクターを作成してリポジトリの DataContext を取り込む前は、すべてが機能していましたが、現在は失敗しています..
私は現在、global.asaxで作成したユニティコンテナにこのセットアップを持っています。標準のDataContextであるMyDataContextタイプも登録しました
container = new UnityContainer();
Container.RegisterType<MyDataContext, MyDataContext>()
.RegisterType<IOfficeRepository, OfficeRepository>()
.RegisterType<IOfficeService, OfficeService>();
基本的に私はそのようにリポジトリを呼び出すサービスを持っています
public class OfficeService : IOfficeService
{
IOfficeRepository repository = null;
public OfficeService(IOfficeRepository repository)
{
this.repository = repository;
if (this.repository == null)
throw new InvalidOperationException("Repository cannot be null");
}
ここに私のリポジトリがあります
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db;
public OfficeRepository (MyDataContext dataContext)
{
this.db = dataContext;
}
編集
サービスを作成するためにこれを行っていることをほとんど忘れていました
officeService = Bootstrapper.Container.Resolve<IOfficeService>();
編集 - 生成されるエラー
Resolution of the dependency failed, type = "MarkSmith.IOfficeService", name = "".
Exception message is: The current build operation (build key Build
Key[MarkSmith.OfficeService, null]) failed: The parameter repository could not be
resolved when attempting to call constructor
MarkSmith.OfficeService(MarkSmith.IOfficeRepository repository). (Strategy type BuildPlanStrategy, index 3)
編集 - リポジトリ作品のコンストラクターの削除
DataContext を使用するリポジトリのコンストラクターを削除すると、すべてが機能するため、datacontext と関係がありますが、毎回「NEW」datacontext を注入できるようにするには、DataContext を受け入れる必要があります。
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db new MyDataContext(); // CHANGE
//public OfficeRepository (MyDataContext dataContext)
//{
//this.db = dataContext;
//}
編集 - 実際のエラー
さらに深く掘り下げた後、このエラーが見つかりました....
The type MyDataContext has multiple constructors of length 2.
Unable to disambiguate. (Strategy type DynamicMethodConstructorStrategy, index 0)
(Strategy type BuildPlanStrategy, index 3)
編集 - 1 行のコードで DATACONTEXT を解決するためのテスト
これも上記と同じエラーで失敗します - 複数のコンストラクター
MyDataContext test = Bootstrapper.Container.Resolve<MyDataContext >();
編集 - DATACONTEXT のすべてのコンストラクター
これらは外部ユーティリティによって作成されましたが、すべて問題ないはずです..
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext()
: base(ConnectionString, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(string connection)
: base(connection, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(System.Data.IDbConnection connection)
: base(connection, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource)
: base(connection, mappingSource)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource)
: base(connection, mappingSource)
{
OnCreated();
}
編集 - Unity を使用せずにコードで DataContext を作成することを示すには、問題なく 100% 動作します
MyDataContext tes2t = new MyDataContext ();