Есть ли способ добавить / поменять расширения? - PullRequest
1 голос
/ 17 марта 2012

У меня есть несколько методов расширения Я использую свои веб-формы asp.net для управления форматированием строк вида сетки.

По сути, они служат своего рода "службой" для моего кода за классами:

    protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        var row = e.Row;
        if (row.RowType == DataControlRowType.DataRow)
        {
            decimal amount = Decimal.Parse(row.GetCellText("Spend"));
            string currency = row.GetCellText("Currency");
            row.SetCellText("Spend", amount.ToCurrency(currency));
            row.SetCellText("Rate", amount.ToCurrency(currency));
            row.ChangeCellText("Leads", c => c.ToNumber());
        }
    }

В отличие от экземпляра класса, они не имеют интерфейса для использования с контейнером DI.

Есть ли способ получить функциональность сменных расширений?

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Не во время выполнения, нет - в конце концов, они просто связаны как вызовы статических методов.

Если вы хотите, чтобы мог их поменять, вы можете рассмотреть возможность размещения в интерфейсах вместо них ...

Если вы готовы поменять их во время compile , просто измените свои директивы using.

2 голосов
/ 17 марта 2012

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

Ну, мой C # лучше, чем мой английский ...

//abstraction
interface IStringExtensions
{
    bool IsNullOrWhiteSpace(string input);
    bool IsNullOrEmpty(string input);
}

//implementation
class StringExtensionsImplementation : IStringExtensions
{
    public bool IsNullOrWhiteSpace(string input)
    {
        return String.IsNullOrWhiteSpace(input);
    }

    public bool IsNullOrEmpty(string input)
    {
        return String.IsNullOrEmpty(input);
    }
}

//extension class
static class StringExtensions
{
    //default implementation
    private static IStringExtensions _implementation = new StringExtensionsImplementation();

    //implementation injectable!
    public static void SetImplementation(IStringExtensions implementation)
    {
        if (implementation == null) throw new ArgumentNullException("implementation");

        _implementation = implementation;
    }

    //extension methods
    public static bool IsNullOrWhiteSpace(this string input)
    {
        return _implementation.IsNullOrWhiteSpace(input);
    }

    public static bool IsNullOrEmpty(this string input)
    {
        return _implementation.IsNullOrEmpty(input);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...