2010-02-15 5 views
1

Я знаю, что конкретные типы могут быть сконфигурированы с Structure карт следующим образом:StructureMap: Настроить конкретные классы во время выполнения?

ForRequestedType<Rule>().TheDefault.Is.Object(new ColorRule("Green")); 

Это работает, если вы знаете тип загодя. Я хочу сделать это во время выполнения, и, похоже, нет способа. Может кто-нибудь просветить меня? То, что я хочу сделать что-то вроде следующего: (Это, кажется, не поддерживается структурной карты)

ForRequestedType(typeof(Rule)).TheDefault.Is.Object(new ColorRule("Green")); 

Причина этого заключается в том, потому что я работаю на обертку для конфигурации Структурно-карты. И я не буду знать тип раньше времени. Для объекта .Object (новый ColorRule («Зеленый»)) я собираюсь вместо этого передать делегат, который фактически построил бы объект по запросу.

ответ

2

Недавно Джереми добавил возможность настройки Func как строителя для вашего типа. Ниже приведен пример использования делегата/лямбда в качестве вашего строителя.

public interface IRule 
{ 
    string Color { get; set; } 
} 

public class ColorfulRule : IRule 
{ 
    public string Color { get; set; } 

    public ColorfulRule(string color) 
    { 
     Color = color; 
    } 
} 

[TestFixture] 
public class configuring_delegates 
{ 
    [Test] 
    public void test() 
    { 
     var color = "green"; 
     Func<IRule> builder =() => new ColorfulRule(color); 

     var container = new Container(cfg=> 
     { 
      cfg.For<IRule>().Use(builder); 
     }); 

     container.GetInstance<IRule>().Color.ShouldEqual("green"); 

     color = "blue"; 

     container.GetInstance<IRule>().Color.ShouldEqual("blue"); 
    } 
} 
+0

Спасибо за попытку, но я не могу использовать Generics, так как я не буду знать тип во время сборки, только во время выполнения. Кроме того, для моей проблемы мне нужно, чтобы она работала с объектами без интерфейса. однако я попробовал свой метод следующим образом: cfg.For (typeof (IRule)). Используйте (builder), но это приводит к тому, что структурная карта генерирует исключение: Ошибки конфигурации StructureMap: Ошибка: 104 ColorfulRule не может быть подключен к типу IRule. – 7wp

+0

Ничего, я думаю, что мне удалось заставить его работать с модификацией вашего кода. Спасибо, что указал мне в правильном направлении! – 7wp

+0

Рад, что вы его работаете для ваших нужд. Извините, вы не можете использовать интерфейсы, которые значительно упрощают работу с контейнерами и дают вам лучший контроль над вашими абстракциями. – KevM

Смежные вопросы