Карта структуры: конкретный класс во время выполнения - PullRequest
4 голосов
/ 05 августа 2011

У меня есть интерфейс и класс, определенный ниже

public interface IShape
{

}

public class Square : IShape
{

}

Я знаю, что могу настроить это для внедрения зависимостей в Структурную карту, как показано ниже.

ObjectFactory.Initialize(x =>
{
   x.For<IShape>().Use<Square>().Named("Square");

}
);

Однако мне интересно, как я могу настроить карту структуры, если я могу знать только конкретный тип во время выполнения. Например, я хотел бы сделать, как показано ниже.;

ObjectFactory.Initialize(x =>
{
   x.For<IShape>().Use<Typeof(Square)>().Named("Square");

}
);

РЕДАКТИРОВАТЬ: новый объект формы (то есть круг) будет подключен с использованием дополнительной библиотеки DLL. Следовательно, дизайн должен быть в состоянии справиться и с этой ситуацией.

Любой совет будет высоко ценится.

Спасибо

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Это работает для меня.

public class ShapeHolder
{
   public IShape shape{ get; set ;}
   public string shapeName { get; set; }
}

//Run time shape creation
ShapeHolder shapeholder = factory.CreateShape();
ObjectFactory.Initialize(x =>
{
   x.For(typeof(IShape)).Use(shapeholder.shape).Named(shapeholder.shapeName);
} );
0 голосов
/ 05 августа 2011

Вам могут помочь некоторые лямбда-выражения ..

// Return a shape based on some runtime criteria
x.For<IShape>.Use(() => shapeFactory.Create());


public class ShapeFactory
{
    public IShape Create()
    {
        // Return a shape based some criteria
        return new Square();
    }
}
...