В новия ASP.NET Core се използват голям брой инжекции на зависимости за писане на код.
Например, в нашия клас Startup можем да видим следното:
AddMvc AddDbContext включва AddDirectoryBrowser, който използвахме за обиколки на директории преди:
Всички те са рамки, които предоставят качествени услуги, и можем да ги използваме директно, като ги инжектираме.
Обръщането на контрола (IoC) е принцип на проектиране в обектно-ориентираното програмиране, който може да се използва за намаляване на връзката между компютърния код. Най-често срещаният метод се нарича Dependency Injection (DI), а съществува и метод, наречен "Dependency Lookup". Чрез контрол на инверсията, когато се създаде обект, външна единица, която контролира всички обекти в системата, му предава препратка към обекта, от който зависи. Може също да се каже, че зависимости се инжектират в обекта. За да използва ioc, класът Startup трябва да се позовава на Microsoft.Extensions.DependencyInjection(ps), което вече е доста просто: Microsoft.. Разширете... Инжекция на зависимост - - ,)
Инжектиране на жизнения цикъл на услуга
Microsoft предоставя 3 жизнени цикъла за самоинжектирани услуги.
Преходен
Мигновена услуга за жизнения цикъл, която се създава всеки път, когато бъде поискана. Този жизнен цикъл е най-подходящ за леки, безграждански услуги.
Обхват
В същия обхват услугата се създава само веднъж на заявка.
Сингълтън (само)
Глобалният файл се създава само веднъж, първия път, когато се иска, и след това винаги се използва.
Как използвате тези три жизнени цикъла? Можем да използваме различни методи директно при инжектиране, кодът е следният:
Нека тестваме конкретното поколение на тези три жизнени цикъла
Пишем три интерфейса с различни имена и 3 различни класа, за да реализираме интерфейсите, както следва:
В конструктора на всеки клас за имплементация генерираме нов GUID, който ни позволява да определим дали класът е изпълнил отново конструктора.
Инжектиране на услуги в контролера
Обикновено има три начина на инжектиране: конструкторско инжектиране, методно инжектиране и атрибутно инжектиране. Собственият IOC контейнер на Microsoft по подразбиране използва инжекция на конструктор (Инжектирането на атрибути не се поддържа, но това може да се постигне с замяна на контейнер от трета страна)
Преглед на кода на страницата:
Стартирайте проекта и го достъпете през два различни браузъра, както е показано по-долу:
Открихме, че GUID-ите, генерирани два пъти в мигновения жизнен цикъл, са несъвместими, което показва, че обектът не е същият.
Въпреки това, жизненият цикъл на обхвата е същият, защото при същия обхват GUID на услугата, използвана два пъти в един и същи браузър, е същият, което показва, че се използва един и същ обект.
В случая с един единствен обект два различни браузъра винаги имат достъп до един и същ GUID, което показва, че се извиква един и същ обект.
(Край)
|