Конфигурирование профилей с StructureMap

Вы должны включить флажок «Regex» и ввести правильное регулярное выражение в поле поиска, вот и все. Если я правильно понял, для ваших примеров правильные запросы будут test.*6 и .*test.*6 соответственно.

enter image description here

7
задан Marc Gravell 24 February 2009 в 21:31
поделиться

2 ответа

Прием должен удостовериться каждый профиль, по крайней мере, как правило, определенное в нем. Если Вы не укажете правило (configA), то оно не будет создавать/видеть профиль.

Учитывая эти классы:

public interface IFoo { string SayHello(); }
public class Foo : IFoo { public string SayHello() { return "Hello"; } }
public class SpecialFoo : IFoo { public string SayHello() { return "Hello Special"; } }

public interface IBar { }
public class Bar : IBar { }

public interface IDummy { }
public class Dummy : IDummy{ }

Можно определить этот реестр:

public class MyRegistry : Registry
{
    protected override void configure()
    {
        ForRequestedType<IBar>().TheDefault.Is.OfConcreteType<Bar>();
        ForRequestedType<IFoo>().TheDefault.Is.OfConcreteType<Foo>();
        CreateProfileNotEmpty("configA");
        CreateProfileNotEmpty("configB")
            .For<IFoo>().UseConcreteType<SpecialFoo>();
    }
    StructureMap.Configuration.DSL.Expressions.ProfileExpression CreateProfileNotEmpty(string profile)
    {
        return CreateProfile(profile)
            .For<IDummy>().UseConcreteType<Dummy>();
    }
}

И это будет работать с этими тестами:

[TestMethod]
public void TestMethod1()
{
    var container = new Container(new MyRegistry());
    Assert.IsNotNull(container.GetInstance<IBar>());
    Assert.AreEqual("Hello", container.GetInstance<IFoo>().SayHello());

    container.SetDefaultsToProfile("configB");
    Assert.IsNotNull(container.GetInstance<IBar>());
    Assert.AreEqual("Hello Special", container.GetInstance<IFoo>().SayHello());

    container.SetDefaultsToProfile("configA");
    Assert.IsNotNull(container.GetInstance<IBar>());
    Assert.AreEqual("Hello", container.GetInstance<IFoo>().SayHello());
}

при замене CreateProfileNotEmpty простым CreateProfile он перестанет работать на строке, которая устанавливает значение по умолчанию на configA.

9
ответ дан 7 December 2019 в 01:27
поделиться

Посмотрите это видео, он показывает другой способ создания профиля "по умолчанию" и использования других именованных профилей, которые будут действовать как варианты.

http://www.dimecasts.net/ Casts / CastDetails / 135

1
ответ дан 7 December 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: