【发布时间】:2011-01-30 12:06:16
【问题描述】:
我在将实例注入结构映射以进行测试时遇到问题。
我的对象图如下所示
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) 然后在没有配置setter注入的情况下创建管理器实例(以避免循环依赖)
foreach (Type pluginType in AllManagers())
{
managerInstances.Add(_container.GetInstance(pluginType));
}
4)最后我使用BuildUp方法设置了IManager类型的Properties。
_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”不能用于类型参数 方法'Castle.Core.Interceptor.IInterceptor[]的'System.String' GetIInterceptor[]'
为什么我注入实例时结构图会尝试使用 InstanceBuilder?
兄弟, 大卫
【问题讨论】:
-
这个问题你解决了吗?我也有同样的例外。
标签: c# structuremap