ASP.net URL Действия MVC с лямбда-выражением

Необходимо изучить Инверсию Управления:

В таком сценарии, Вы не записали бы это:

IInterface classRef = new ObjectWhatever();

Вы записали бы что-то вроде этого:

IInterface classRef = container.Resolve();

Это вошло бы в основанную на правилах установку в эти container объект и создало бы фактический объект для Вас, которые могли быть ObjectWhatever. Важная вещь состоит в том, что Вы могли заменить это правило чем-то, что использовало другой тип объекта в целом, и Ваш код будет все еще работать.

, Если мы покидаем МОК от таблицы, можно записать код, который знает, что это может говорить с объектом , который делает что-то определенное , но не, какой тип объекта или как это делает это.

Это пригодилось бы когда передающие параметры.

Что касается Вашего заключенного в скобки вопроса "Кроме того, как Вы могли записать метод, который берет в объекте, который реализует Интерфейс? Это возможно?", в C# Вы просто использовали бы интерфейсный тип для типа параметра, как это:

public void DoSomethingToAnObject(IInterface whatever) { ... }

Это включает право, "говорят с объектом, который делает что-то определенное". Метод, определенный выше, знает, что ожидать от объекта, что это реализует все в IInterface, но это не заботится, какой тип объекта это, только что это придерживается контракта, который является, каков интерфейс.

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

Это - красота интерфейсов. Можно записать часть кода, который знает, что это доберется, объекты передали ему, что это может ожидать определенное поведение из. Это не заботится об одном крике, какой объект это, только что это поддерживает необходимое поведение.

Позволяют мне дать Вам конкретный пример.

у Нас есть сделанная на заказ система перевода для форм окон. Эта система циклы посредством средств управления на форме и переводит текст в каждом. Система знает, как обработать основные средства управления, как the-type-of-control-that-has-a-Text-property, и подобный основной материал, но для чего-либо основного, это терпит неудачу.

Теперь, так как средства управления наследовались предопределенным классам, что мы не имеем никакого контроля, мы могли сделать одну из трех вещей:

  1. поддержка Сборки нашей системы перевода для обнаружения конкретно, какой тип управления это работает с и переводит корректные биты (кошмар обслуживания)
  2. , Встраивает поддержку в базовые классы (невозможный, так как все средства управления наследовались различным предопределенным классам)
  3. поддержка интерфейса Add

, Таким образом, мы сделали номер 3. Все наши средства управления реализуют ILocalizable, который является интерфейсом, который дает нам один метод, способность перевести "себя" в контейнер текста/правил перевода. По сути, форма не должна знать, какой вид управления она нашла, только что она реализует определенный интерфейс и знает, что существует метод, где она может звонить для локализации управления.

6
задан ljubomir 28 March 2014 в 14:13
поделиться