【问题标题】:Autowire setters using StructureMap使用 StructureMap 自动装配设置器
【发布时间】:2012-03-26 22:45:29
【问题描述】:

假设我有以下内容:

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()

【问题讨论】:

    标签: c# inversion-of-control structuremap


    【解决方案1】:
    new Container(x => {
     x.For<IDoStuff>().Singleton().Use<DoerOfStuff>();
     x. FillAllPropertiesOfType<IDoStuff>();
    })
    

    【讨论】:

    • 既然Doer是一个属性,那么是不是也需要在RandomClass对象创建后运行IContainer.BuildUp()来初始化属性?
    • 由于某种原因这对我不起作用,我得到一个空引用。如果我做一个 ObjectFactory.GetInstance 它可以工作,所以我不确定出了什么问题。
    • 我能够让它工作的唯一方法是添加 ObjectFactory.BuildUp(this);到 RandomClass (请参阅我的编辑)。如果您将其添加到您的答案中或告诉我我如何不需要它,我将很乐意接受您的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多