0

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 にオブジェクト プロパティを初期化させることができますか?

何か不足していますか?

4

1 に答える 1

1

StructureMap が作成時に Logger プロパティを設定できるようSettingsに、パラメーターを持つクラスにコンストラクターが必要です。LoggerSettings

何らかの理由でコンストラクター注入を使用できない/使用したくない場合は、クラス publicのLoggerプロパティのセッターを作成し、StructureMap でプロパティ注入を構成する必要があります。Settings

TL;DR : 次のようにSettingsします。

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

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