У меня есть другая перспектива ответить на это.
При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.
public class MyController
{
private ServiceA serviceA;
private ServiceB serviceB;
public MyController(ServiceA serviceA, ServiceB serviceB)
{
this.serviceA = serviceA;
this.serviceB = serviceB;
}
public void MyMethod()
{
// We don't need to check null because the dependency injection container
// injects it, provided you took care of bootstrapping it.
var someObject = serviceA.DoThis();
}
}
Когда вы создаете регулярное выражение, у вас есть возможность захвата частей матча и сохранения их в качестве заполнителей. Они нумеруются начиная с $1
.
Например:
/A(\d+)B(\d+)C/
Это будет захватывать из A90B3C
значения 90
и 3
. Если вам нужно группировать вещи, но не хотите их захватывать, используйте (?:...)
версию вместо (...)
.
Цифры начинаются слева направо в том порядке, в котором скобки открыты. Это означает:
/A((\d+)B)(\d+)C/
При сопоставлении с той же строкой будут записаны 90B
, 90
и 3
.
Это особенно. полезно для Синтаксис строки замены (т. е. форматирование строк) Хорошо подходит для случаев / футляров для поиска Find & amp; Заменяет. Чтобы ссылаться на захват, используйте $ n, где n - номер регистра захвата. Использование $ 0 означает весь матч. Пример: Find: (<a.*?>)(.*?)(</a>) Replace: $1\u$2\e$3