リポジトリでは、アプリケーションの存続期間を通じて存続するいくつかのインスタンスを保持していますが、新しいインスタンスを container.GetInstance コンストラクターのオーバーライドに渡したとしても、そのようなインスタンスを別のインスタンスと LightInject にすぐに置き換える必要がある場合があります。
問題を示すスニペットを次に示します。
internal class ClassA
{
public string Name { get; private set; }
public ClassA(string name)
{
Name = name;
}
public override string ToString()
{
return Name;
}
}
internal class ClassB
{
public ClassA A { get; private set; }
public ClassB(ClassA a)
{
A = a;
}
public override string ToString()
{
return string.Format("I contain {0}", A);
}
}
private void TestContainer()
{
var container = new LightInject.ServiceContainer();
var a1 = new ClassA("A instance 1");
container.Register(x => a1);
container.Register<ClassB>();
var a2 = new ClassA("A instance 2");
var bwitha1 = container.GetInstance<ClassB>();
if(bwitha1.A != a1)
{
throw new InvalidOperationException("This will not happen");
}
var bwitha2 = container.GetInstance<ClassA, ClassB>(a2);
if(bwitha2.A != a2)
{
throw new InvalidOperationException("Something went wrong here");
}
}
GetInstance 呼び出しで明示的なインスタンスを指定すると、以前に登録された LightInject インスタンスが優先されるのはなぜですか? 問題を回避し、引数の 1 つの代替インスタンスを使用してオブジェクトを構築するにはどうすればよいですか?