我在为我的测试注入实例到结构映射时遇到问题。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