0

我在我的服务中注入了一个全局设置接口,作为 Singleton,使用 StructureMap:

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 为空......我怎样才能让 SM 初始化对象属性?

我错过了什么吗?

4

1 回答 1

1

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

如果您由于某种原因不能/不想使用构造函数注入,则需要将类上的Logger属性的设置器设为Settings公共并在 StructureMap 中配置属性注入。

TL; DRSettings看起来像这样:

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

    public LoggerSettings Logger { get; private set; }
} 
于 2013-03-28T09:58:51.510 回答