2013-03-28 2 views
1

В приложении ASP.NET MVC с несколькими сборками мне нужно получить доступ к нескольким настройкам.Глобальные настройки в приложении

В принципе. настройки - это константы или значения из Web.Config AppSettings.

Моя идея заключается в том, чтобы ввести Settings класс, как синглтон, в тех местах, где это необходимо:

public interface ISettings { 
    LoggerSettings Logger { get; } 
} // ISettings 

public class LoggerSettings { 
    public String Levels { get { return ConfigurationManager.AppSettings["Logger.Levels"]; } } 
    public const String Report = "[email protected]"; 
} // LoggerSettings 

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

    public Settings() { 
    Logger = new LoggerSettings(); 
    } 
} // Settings 
  1. Что вы думаете об этом подходе и инъекционного класс как синглтон?

  2. Нужно ли в этом случае установить любой класс/свойство как статический? Думаю, мне нужно, чтобы LoggerSettings и его свойства были статичными, а не? В противном случае мне нужно будет создать новый экземпляр при создании настроек?

Может кто-нибудь, пожалуйста, посоветуйте мне об этом?

ответ

3

Если вы на самом деле , впрысните ваш класс (через каркас DI), а по слову «singleton» вы подразумеваете, что вы используете одноразовый «масштаб» в вашей структуре DI, тогда этот подход будет работать нормально. Если это на самом деле то, что вы делаете, то ни одно из ваших свойств не должно быть статическим, поскольку один и тот же экземпляр «singleton» будет введен в любой класс, который зависит от него.

+0

Да, я использую StructureMap, чтобы вводить его как Singleton ... Но не будет ли LoggerSettings внутри настроек быть нулевым, потому что он не является статическим? –

+0

Я раньше не использовал StructureMap, но, предположительно, он будет каждый раз вводить (такую ​​же) зависимость 'LoggerSettings' в свой класс' Settings'; то есть он должен * вставлять * эту зависимость в 'Настройки'. Поскольку ваше свойство помечено 'private set', я не уверен, как он это сделает, но я предполагаю, что это то, что вы пытаетесь сделать. –

+0

Я удалил частный набор, и в моей конфигурации StructureMap у меня есть следующее: Для () .Singleton(). Используйте (); Это будет успешно внедрять ISettings в мои службы, но его свойство Logger равно null. Это то, чего я не понимаю. –