我在爲我的測試注入實例到結構映射時遇到問題。StructureMap不可能使用注入實例進行setter注入
我的對象圖形看起來像這樣
internal class ConfigurationManager : IConfigurationManager : IManager
{
public ISomeManager SomeManager { get; set; }
}
internal class SomeManager : ISomeManager : IManager
{
public IConfigurationManager ConfigurationManager { get; set; }
}
1)第一i-創建容器,並添加所有發現登記
_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)然後,管理器實例在沒有setter注入配置創建(以避免循環依賴)
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 錯誤,並嘗試爲 IConfigurationManagerProxyd079980359cf491b821a3afb15be8a86, DynamicProxyGenAssembly2創建InstanceBuilder,版本= 0.0.0.0,文化=中立, 公鑰=空---->系統.ArgumentException:不能被用於方法的類型 'System.String' 的參數 類型 'System.Object的' 表達 'Castle.Core.Interceptor.IInterceptor [] GetIInterceptor []'
爲什麼當我注入實例時,結構映射嘗試使用InstanceBuilder?
BR, 大衛
你解決了這個問題嗎?我有同樣的例外。 – AdamSane 2012-04-11 13:27:12