Skip to main content
 首页 » 编程设计

c#之使用 StructureMap 的 Autowiring 器

2024年01月02日30mfryf

假设我有以下内容:

public interface IDoStuff  
 
public class DoerOfStuff : IDoStuff 
 
public class RandomClass 
{ 
    public IDoStuff Doer {get; set; } 
    ... 
} 

假设 RandomClass 只有一个默认构造函数(我们希望保持这种状态),我的问题是:

  1. 我如何引导 StructureMap 以便 RandomClass 中的 Doer 自动连接到 DoerOfStuff?
  2. 我怎样才能使它更通用,以便任何具有 IDoStuff 属性的类都自动连接到 DoerOfStuff?
  3. 如何使 DoerOfStuff 成为单例?

提前致谢!

注意:我假设这可以通过 StructureMap 实现,因此理想情况下答案会显示这一点。如果出于某种原因您知道它不是,请随时展示您将如何使用不同的容器。

干杯,
-肖恩


编辑:
这是我如何让它工作的:

ObjectFactory.Initialize(x => 
{ 
    x.For<IDoStuff>().Singleton().Use<DoerOfStuff>(); 
    x.SetAllProperties(policy => policy.TypeMatches(type => type == typeof(IDoStuff))); 
    // this works too 
    // x.FillAllPropertiesOfType<IDoStuff>(); 
}); 

但无论哪种情况,只有在我还添加以下内容时才有效:

public RandomClass() 
{ 
    ObjectFactory.BuildUp(this); 
} 

我仍然很好奇我是否可以以某种方式跳过 BuildUp()。

请您参考如下方法:

new Container(x => { 
 x.For<IDoStuff>().Singleton().Use<DoerOfStuff>(); 
 x. FillAllPropertiesOfType<IDoStuff>(); 
})