小编Dav*_*ger的帖子

StructureMap不可能使用注入实例进行setter注入

我在为我的测试注入一个实例到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)

c# structuremap

15
推荐指数
1
解决办法
1765
查看次数

标签 统计

c# ×1

structuremap ×1