Класс конфигурации ASP.NET MVC с использованием IoC - PullRequest
0 голосов
/ 08 декабря 2010

В приложении MVC нам необходимо создать класс параметров конфигурации, необходимый для всего приложения.Это сквозная проблема в том, что она нуждается в контроллерах, иногда глубоко в доменной логике, а также в таких местах, как расширения HtmlHelper.Тот факт, что он нужен, так много разных мест, это то, что сбивает меня с толку.

Класс обернет параметры, извлеченные из файла web.config, а также таблицу в БД.Запрос настроек БД будет кешироваться, поэтому меня не беспокоит, что его ударили по каждому запросу.

В прошлые годы я, возможно, создал какой-то статический тип класса или синглтона, но я не хочупотерять тестируемость у меня сейчас.Как лучше всего создать экземпляр этого класса, а затем получить к нему доступ практически из любого места приложения?

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

Я бы продолжил использовать синглтон. Но синглтон, который оборачивает интерфейс, что также делает его тестируемым.

public class Configuration
{
    private IConfiguration _config;

    public static IConfiguration Instance { get { return _config; }}

    public static void Assign(IConfiguration config)
    {
       _config = config;
    }
}

Просто используйте Assign в global.asax или любом из ваших модульных тестов.

Если вы хотите сделать это правильно, вы должны указать параметры конфигурации непосредственно в конструкторах ваших объектов.

Вместо

public class MyService
{
    public MyService()
    {
        var confString = Configuration.Instance.GetConnectionString()
    }
}

Вы бы сделали:

public class MyService
{
    public MyService(string confString)
    {}
}

Наконец, у меня не будет никаких конфигурационных зависимостей в помощниках HTML. Тем самым вы добавляете бизнес-логику к своим представлениям, что нарушает разделение интересов

0 голосов
/ 08 декабря 2010

Я бы реорганизовал свое приложение, чтобы не использовать конфигурацию везде. Я использую конфигурацию только в контроллерах. У моих представлений нет никакой логики, у моей доменной модели есть просто бизнес-логика, а не логика приложения.

0 голосов
/ 08 декабря 2010

Я думаю, что проект codeplex mvccontrib предоставил некоторые хуки для использования как минимум 3 провайдера МОК, насколько я не виндзор, structurmap, spring.net ... но я сам этим не пользовался Вы можете узнать больше здесь http://mvccontrib.codeplex.com/

и, возможно, вы можете заглянуть в исходный код этого проекта и посмотреть, куда вы можете пойти оттуда ...

НТН

...