Hi :)
I have this odd problem with StructureMap with regards to using the MissingNamedInstanceIs feature. When doing _containerInstance.GetInstance<T>("key")
vs. ObjectFactory.GetNamedInstance<T>("key"
) I get the following error:
StructureMap.StructureMapException : StructureMap Exception Code: 200
Could not find an Instance named "key" ...
If you try out the following code you'll see that the first test fails, but the second passes:
[TestFixture]
public class ObjectFactoryTests
{
private readonly IContainer _container;
public ObjectFactoryTests()
{
_container = new Container();
_container.Configure(x =>
{
x.ForRequestedType<IFoo>().AddInstances(z => z.OfConcreteType<Foo>());
x.ForRequestedType<IFoo>().MissingNamedInstanceIs.OfConcreteType<FooBar>();
});
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IFoo>().AddInstances(z => z.OfConcreteType<Foo>());
x.ForRequestedType<IFoo>().MissingNamedInstanceIs.OfConcreteType<FooBar>();
});
}
[Test]
public void missing_namedinstance_fails_when_using_container_instance()
{
var foo = _container.GetInstance<IFoo>();
var namedFoo = _container.GetInstance<IFoo>("missing");
// Kaboom!
}
[Test]
public void missing_namedinstance_works_when_using_static_container()
{
var namedFoo = ObjectFactory.GetNamedInstance<IFoo>("missing");
Assert.AreEqual(namedFoo.GetType(), typeof(FooBar));
}
public interface IFoo { }
public class Foo : IFoo { }
public class FooBar : IFoo {}
}
Does anyone know why the behavior is different and what I am doing wrong?
Best Regards, ahjohannessen