public interface IInterface1
{
}
public interface IInterface2
{
}
public class MyClass : IInterface1, IInterface2
{
}
...
ObjectFactory.Initialize(x =>
{
x.For<IInterface1>().Singleton().Use<MyClass>();
x.For<IInterface2>().Singleton().Use<MyClass>();
});
var x = ObjectFactory.GetInstance<IInterface1>();
var y = ObjectFactory.GetInstance<IInterface2>();
Я получаю два различных экземпляра MyClass с вышеупомянутым кодом. Как я могу получить тот?
Вы можете использовать регистрацию Forward <,> (), чтобы указать StructureMap разрешить тип, используя разрешение другого типа. Это должно сделать то, что вы ожидаете:
ObjectFactory.Initialize(x =>
{
x.For<IInterface1>().Singleton().Use<MyClass>();
x.Forward<IInterface1, IInterface2>();
});
Я бы зарегистрировал MyClass, а затем вытащить его из контекста для операторов Use отдельных интерфейсов.
ForSingletonOf<MyClass>().Use<MyClass>();
For<IInterface1>().Use(ctx => ctx.GetInstance<MyClass>());
For<IInterface2>().Use(ctx => ctx.GetInstance<MyClass>());
Попробуйте рассматривая различные используемые перегрузки, особенно перегрузку Func. Оттуда вы можете сказать, как StructureMap должен создать ваш экземпляр с другим уже зарегистрированным объектом.
ObjectFactory
предназначена для создания нескольких экземпляров. Если вам нужен синглтон, напишите одноэлементный класс (возможно, с общедоступными свойствами IInterface1
и IInterface2
в качестве средств доступа).
Кажется, это схематично задокументировано, но, возможно, вы можете использовать вместо него Контейнер .