我在为我的测试注入一个实例到structmap时遇到了问题.
我的对象图看起来像这样
internal class ConfigurationManager : IConfigurationManager : IManager
{
public ISomeManager SomeManager { get; set; }
}
internal class SomeManager : ISomeManager : IManager
{
public IConfigurationManager ConfigurationManager { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
1)首先我创建容器并添加所有找到的注册表
_container = new Container(c => c.Scan(s =>
{
s.TheCallingAssembly();
s.LookForRegistries();
}));
Run Code Online (Sandbox Code Playgroud)
其中一个扫描的程序集包含以下注册
x.For<IConfigurationManager>().Singleton.Use<ConfigurationManager>();
Run Code Online (Sandbox Code Playgroud)
2)然后我想为这些经理注入一个特殊的模拟对象
_configurationManagerStub = MockRepository.GenerateStub<IConfigurationManager>();
_container.Inject(_configurationManagerStub);
Run Code Online (Sandbox Code Playgroud)
3)然后创建管理器实例,而不配置setter注入(以避免循环依赖)
foreach (Type pluginType in AllManagers())
{
managerInstances.Add(_container.GetInstance(pluginType));
}
Run Code Online (Sandbox Code Playgroud)
4)最后我使用BuildUp方法设置IManager类型的属性.
_container.Configure(x => x.SetAllProperties(c =>
{
// configure the property injection for all managers …Run Code Online (Sandbox Code Playgroud)