Ошибки StructureMap при использовании простой конфигурации на основе Constructor Injection - PullRequest
0 голосов
/ 21 декабря 2011

Я попытался выполнить простую программу, чтобы опробовать внедрение на основе конфигурации. Вот код:

using StructureMap;
namespace StructureMapConfig
{
    class Program
    {
        static void Main(string[] args)
        {
            ObjectFactory.Initialize(x =>
                {
                    x.PullConfigurationFromAppConfig = true;
                });

            var result = ObjectFactory.GetInstance<IIConstructor>();
        }
    }

    public interface IIConstructor
    {
    }

    public class Constructor : IIConstructor
    {
        public Constructor(bool test)
        {

        }
    }
}

Вот мой файл конфигурации:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="StructureMap"
             type="StructureMap.Configuration.StructureMapConfigurationSection,StructureMap"/>
  </configSections>
  <StructureMap>
    <DefaultInstance MementoStyle="Attribute"
                     PluginType="StructureMapConfig.IIConstructor,StructureMapConfig"
                     PluggedType="StructureMapConfig.Constructor,StructureMapConfig"
                     test="false"/>
  </StructureMap>
  <startup>
    <supportedRuntime version="v4.0"
                      sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

Я продолжаю получать трассировку большого стека при чтении файла конфигурации, сводясь к этой ошибке:

Попытка посетить тест параметра типа System.Boolean в конструктор для StructureMapConfig.Constructor, StructureMapConfig, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null ---> StructureMap.StructureMapException: Код исключительной ситуации StructureMap: 205 Отсутствует запрошенное свойство Instance "test" для InstanceKey «DefaultInstanceOfStructureMapConfig.IIConstructor, StructureMapConfig, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нуль

Код определенно имеет аргумент конструктора с именем «test», а тип назначения правильный - логический.

Может кто-нибудь подсказать, пожалуйста, где я ошибаюсь?

-

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

1 Ответ

1 голос
/ 21 декабря 2011

Понял,

"MementoStyle" должен быть на элементе <StructureMap>, а не на <DefaultInstance>

...