0
私はインターフェイスとそのインターフェイスを実装するクラスを持っています。そのクラスはデフォルトの静的インスタンスを持ち、明示的に(引数を渡して)構築することもできます。StructureMap既定のインスタンスと追加の明示的な引数を持つ
デフォルトインスタンスが静的インスタンスになるようにStrucutreMapを設定するにはどうしたらいいですか?また、引数を指定してインスタンスをリクエストすると、新しいインスタンスが作成されますか?ここで
は、私はあなたが直面している問題は、同じインタフェースのための複数の実装を登録するときに、最後の1がでGetInstanceによって解決されようとしているものであることだと思い
[TestFixture]
public class StructureMapTests
{
[Test]
public void Test_same_interface_default_implemenation_and_with_parameter()
{
IMyInterface defaultImp = new MyImpl(0);
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().Use(defaultImp);
x.For<IMyInterface>().Add<MyImpl>().Ctor<int>().IsTheDefault();
});
Assert.AreEqual(defaultImp, ObjectFactory.GetInstance<IMyInterface>());
var instance1 = ObjectFactory.With("value").EqualTo(1).GetInstance<IMyInterface>();
Assert.AreEqual(true, instance1 != defaultImp); //<-- fails here
Assert.AreEqual(1, instance1.GetValue());
var instance2 = ObjectFactory.With("value").EqualTo(2).GetInstance<IMyInterface>();
Assert.AreEqual(true, instance1 != defaultImp);
Assert.AreEqual(2, instance2.GetValue());
}
public interface IMyInterface
{
int GetValue();
}
public class MyImpl : IMyInterface
{
private int _value;
public MyImpl(int value)
{
_value = value;
}
public int GetValue()
{
return _value;
}
}
}