Я попытался выполнить простую программу, чтобы опробовать внедрение на основе конфигурации. Вот код:
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», а тип назначения правильный - логический.
Может кто-нибудь подсказать, пожалуйста, где я ошибаюсь?
-
Примечание: я хочу сохранить это только в конфигурации, так как это потребует повторной компиляции, если это значение будет изменено с "ложного" на "истинное", следовательно, победит смысл его определения в конфигурации.