2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
määritelmä : Ohjauksen käännös on suunnitteluperiaate, joka kääntää ohjauksen kulkua perinteisessä ohjelmoinnissa. Perinteisissä ohjelmointimalleissa komponenttien väliset riippuvuudet luodaan ja ylläpidetään sisäisesti komponenttien itsensä toimesta. Ohjaustilan käänteessä tätä riippuvuutta hallitsee ulkoinen säilö (kuten Spring-kehys, Microsoft.Extensions.DependencyInjection .NET:ssä jne. Komponentti ei ole enää vastuussa omista riippuvuuksistaan, vaan lisää kaikki riippuvuudet). vaadittujen riippuvuuksien kautta.
pääidea: Siirtää objektien luomisen ja niiden välisten riippuvuuksien hallinnan itse objekteista ulkoisiin säilöihin.
etu:
määritelmä : Riippuvuusinjektio on erityinen tapa saada ohjauksen käänteinen. Se sisältää riippuvuuksien (palvelujen tai objektien) siirtämisen luokkiin sen sijaan, että luokkien annettaisiin luoda niitä itse.
Menetelmä toteuttaa:
määritelmä :IOC-kontti on kehys objektien elinkaaren ja riippuvuuksien hallintaan. Se luo automaattisesti objekteja määrityksen perusteella (kuten XML-tiedostot, huomautukset tai koodimääritykset) ja lisää riippuvuuksia näihin objekteihin.
vaikutus:
C#:ssa voit käyttää erilaisia IOC-säilöjä riippuvuuksien hallintaan, kuten Microsoft.Extensions.DependencyInjection (.NET Coren ja uudempien versioiden sisäänrakennettu DI-säilö), Autofac jne. Seuraavassa on esimerkkinä Microsoft.Extensions.DependencyInjection, jolla esitellään, kuinka IOC-säilöjä käytetään riippuvuuksien hallintaan C#-projekteissa.
Palveluita käytetään tyypillisesti .NET-sovelluksissaProgram.cs
taiStartup.cs
(ASP.NET Core -projekteille), jota käytetäänIServiceCollection
käyttöliittymä rekisteröintiä varten.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMyService, MyService>(); // 将MyService注册为单例服务
// 其他服务注册
}
Lisää riippuvuuksia ohjaimeen, palveluun tai mihin tahansa muuhun luokkiin rakentajan kautta.
public class MyController : Controller
{
private readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService = myService;
}
// ... 控制器的其他代码
}
Yllä olevassa esimerkissäMyController
Luokka injektoidaan konstruktorin kauttaIMyService
Käyttöliittymän toteutus (esim.MyService
ystävällinen).Tällä tavalla, milloinMyController
Kun IOC-säilö on luotu, se avautuu automaattisestiIMyService
Toteutus ruiskutetaan konstruktoriin.