У меня проблема с внедрением экземпляра в структурную карту для моих тестов.
График моих объектов выглядит так
internal class ConfigurationManager : IConfigurationManager : IManager
{
public ISomeManager SomeManager { get; set; }
}
internal class SomeManager : ISomeManager : IManager
{
public IConfigurationManager ConfigurationManager { get; set; }
}
1) сначала я создаю контейнер и добавляю все найденные реестры
_container = new Container(c => c.Scan(s =>
{
s.TheCallingAssembly();
s.LookForRegistries();
}));
одна из этих отсканированных сборок содержит следующую регистрацию
x.For<IConfigurationManager>().Singleton.Use<ConfigurationManager>();
2) тогда я хочу добавить специальный фиктивный объект для этих менеджеров
_configurationManagerStub = MockRepository.GenerateStub<IConfigurationManager>();
_container.Inject(_configurationManagerStub);
3) Затем создаются экземпляры менеджера без настроенного внедрения сеттера (чтобы избежать циклических зависимостей)
foreach (Type pluginType in AllManagers())
{
managerInstances.Add(_container.GetInstance(pluginType));
}
4) наконец я использую метод BuildUp для установки свойств типа IManager.
_container.Configure(x => x.SetAllProperties(c =>
{
// configure the property injection for all managers
c.Matching(prop => typeof(IManager).IsAssignableFrom(prop.PropertyType));
}));
// push in dependencies -> EXCEPTION
managerInstances.ForEach(x => _container.BuildUp(x));
К сожалению, в последней строке кода я получаю следующее исключение.
StructureMap.StructureMapException: Код исключения StructureMap: 245
Ошибка при попытке создать InstanceBuilder для
IConfigurationManagerProxyd079980359cf491b821a3afb15be8a86,
DynamicProxyGenAssembly2, версия = 0.0.0.0, культура = нейтральная,
PublicKeyToken = null ----> System.ArgumentException: выражение
тип 'System.Object' не может использоваться для параметра типа
'System.String' метода 'Castle.Core.Interceptor.IInterceptor []
GetIInterceptor []
Почему Structuremap пытается использовать InstanceBuilder, когда я внедрил экземпляр?
Br,
David