初始化对象属性

时间:2013-03-28 01:17:07

标签: structuremap

我正在使用StructureMap:

在我的服务中注入一个全局设置界面,如Singleton
public interface ISettings {
  LoggerSettings Logger { get; }
} // ISettings

public class LoggerSettings {
  public String Levels { get { return ConfigurationManager.AppSettings["Logger.Levels"]; } }
  public const String Report = "team@xyz.com";
} // LoggerSettings

public class Settings : ISettings {
  public LoggerSettings Logger { get; private set; }
} // Settings

作为SM配置,我有:

For<ISettings>().Singleton().Use<Settings>();

我可以注入这个对象,但是当我检查注入的对象时,它的属性Logger为null ...我怎样才能让SM初始化对象属性?

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您需要Settings类上具有LoggerSettings参数的构造函数,以便StructureMap可以在创建时设置Logger属性。

如果由于某种原因不能/不想使用构造函数注入,则需要在Logger类公共Settings属性和configure property injection上设置setter StructureMap。

TL; DR :make Settings如下所示:

public class Settings : ISettings {
    public Settings(LoggerSettings logger)
    {
         Logger = logger;
    }

    public LoggerSettings Logger { get; private set; }
}