Единство беглой регистрации - это может быть короче? - PullRequest
0 голосов
/ 10 июня 2011

Если у меня есть класс, который принимает несколько аргументов конструктора, включая строку, которая может быть нулевой, в настоящее время я использую следующий синтаксис для его регистрации:

    container.RegisterType<ISomething, Something>(
new InjectionConstructor(new InjectionParameter<string>(aString), typeof(ISomethingHelper), typeof(ISomethingManager)))

Я добавил InjectionParameter, чтобы справиться с нулевой строкой, на которую Unity жаловалась без этого.

Все ли это необходимо или я могу немного его укоротить?

1 Ответ

0 голосов
/ 14 июня 2011

Null - это особый случай, так как мы не можем получить тип из константы с типом null (он просто поступает через компилятор как объект типа). Так что если не написать маленькую вспомогательную функцию / класс, да, это так коротко, как только может.

Я мог бы написать что-то вроде этого:

public static class NullParam
{
    public InjectionParameter OfType<T>()
        where T : class
    {
        return new InjectionParameter<T>(null);
    }
}

Тогда вы могли бы написать выше как:

container.RegisterType<ISomething, Something>(
    new InjectionConstructor(
        NullParam.OfType<string>, typeof(ISomethingHelper), typeof(ISomethingManager)));

Я не уверен, что это достаточно короче, чтобы стоило представить помощника.

API Unity разработан с учетом регулярности и расширяемости, а не краткости или удобства. Это делает некоторые вещи более многословными, чем было бы идеально. Приятно то, что довольно легко написать маленькие обертки и помощники, чтобы регистрационный код выглядел так, как вы хотите.

...