私は StructureMap を初めて使用し、他の人が抱えている問題の逆のように見える次の問題を抱えています。UnitOfWorkClass
次のように定義されたジェネリックがあります。
public class UnitOfWork<TContext> : IUnitOfWork
where TContext : IContext, new()
{
....
}
ただし、具体的なインスタンスにいくつかの異なる可能性がある場合、これを登録して解決する方法については困惑しています。
私は、人々が次のような一般的なインターフェースを持っている例をたくさん見てきました:
Scan を使用したジェネリック型の StructureMap 自動登録
ですから、自分のデザインも見直す必要があるかどうかという質問をすることができると思います!
どうもありがとう!
# 可能な解決策を編集しますか?したがって、コンストラクターに2つのパラメーターを受け取るクラスがあります。
public MyClass(IUnitOfWork firstConstructor,
IUnitOfWork secondConstructor)
{
...
}
次に、オブジェクト グラフが作成されると、次のことを行います。
ObjectFactory.Initialize(cfg =>
{
var firstContext = cfg.For<IContext>().Use<MyFirstContext>();
var secondContext = cfg.For<IContext>().Use<MySecondContext>();
var firstUnitOfWork =
cfg.For<IUnitOfWork>().Use<UnitOfWork<MyFirstContext>>()
.Ctor<IContext>().Is(firstContext);
var secondUnitOfWork =
cfg.For<IUnitOfWork>().Use<UnitOfWork<MySecondContext>>()
.Ctor<IContext>().Is(secondContext);
cfg.For<IMyClass>().Use<MySecondContext>()
.Ctor<IUnitOfWork>("firstConstructor").Is(firstUnitOfWork)
.Ctor<IUnitOfWork>("secondConstructor").Is(secondUnitOfWork);
});
だから私がここでやったことは次のとおりです。
- IContext の依存関係を解決し、それらを変数に格納しました
- 解決された IContext を IUnitOfWork コンストラクターに挿入しました
- その後、正しいジェネリック UnitOfWork コンストラクターを正しく解決できます
完璧ではありませんが、これは私のニーズに合っていると思います...