dependency-injection - RIP Tutorial from: dependency-injection It is an unofficial and free...

download dependency-injection - RIP Tutorial from: dependency-injection It is an unofficial and free dependency-injection

of 16

  • date post

    12-Jun-2020
  • Category

    Documents

  • view

    2
  • download

    0

Embed Size (px)

Transcript of dependency-injection - RIP Tutorial from: dependency-injection It is an unofficial and free...

  • dependency-injection

    #dependenc

    y-injection

  • Table des matières

    À propos 1

    Chapitre 1: Démarrer avec l'injection de dépendance 2

    Remarques 2

    Examples 2

    Quel est un exemple de base de l'injection de dépendance? 2

    Chapitre 2: .NET - Exemples de DI purs 4

    Remarques 4

    Examples 4

    Web Api 4

    MVC 5

    ASP.NET Core 6

    Chapitre 3: Constructeur Injection 8

    Examples 8

    Constructeur Injection 8

    Chapitre 4: Injection de méthode 10

    Examples 10

    Un exemple simple d'injection de méthode dans c # 10

    Chapitre 5: Injection de propriété 11

    Examples 11

    Un exemple très simple d'injection de propriété avec C # avec une valeur par défaut locale 11

    Un exemple simple d'injection de propriété, définissant la valeur par défaut via l'injecti 12

    Crédits 14

  • À propos

    You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: dependency-injection

    It is an unofficial and free dependency-injection ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official dependency- injection.

    The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.

    Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to info@zzzprojects.com

    https://riptutorial.com/fr/home 1

    http://riptutorial.com/ebook/dependency-injection https://archive.org/details/documentation-dump.7z mailto:info@zzzprojects.com

  • Chapitre 1: Démarrer avec l'injection de dépendance

    Remarques

    Dans la programmation orientée objet, les objets dépendent souvent d'autres objets pour faire les choses.

    L'injection de dépendance (DI) consiste à donner à un objet les éléments dont il dépend afin qu'il n'ait pas à se soucier de les obtenir lui-même. C'est-à-dire que les dépendances sont injectées dans l'objet. Cela se fait le plus souvent avec l' injection de constructeur ou l' injection de propriété .

    L'injection de dépendance est une forme d' inversion de contrôle (IoC). IoC est un terme plus large qui décrit un modèle de conception de logiciel.

    Dans la programmation procédurale traditionnelle, le flux de contrôle suit logiquement les étapes. Le contrôle est entre les mains de l'objet ou de la fonction effectuant des opérations. Pas à pas, le programme exécute une série d'opérations qu'il contrôle explicitement.

    Au lieu de l'objet ou de la fonction détaillant chaque étape, le flux de contrôle peut être inversé en faisant en sorte que les opérations soient exécutées par des objets plus génériques et abstraits - généralement un cadre de portée plus large.

    Examples

    Quel est un exemple de base de l'injection de dépendance?

    Voici une classe (Dog) créant sa propre dépendance (Food):

    class Dog { public Dog() { var food = new Food(); this.eat(food); } }

    Voici la même classe injectée avec sa dépendance en utilisant l'injection de constructeur:

    class Dog { public Dog(Food food) { this.eat(food); } }

    Lire Démarrer avec l'injection de dépendance en ligne: https://riptutorial.com/fr/dependency-

    https://riptutorial.com/fr/home 2

    https://riptutorial.com/fr/dependency-injection/topic/4361/demarrer-avec-l-injection-de-dependance

  • injection/topic/4361/demarrer-avec-l-injection-de-dependance

    https://riptutorial.com/fr/home 3

    https://riptutorial.com/fr/dependency-injection/topic/4361/demarrer-avec-l-injection-de-dependance

  • Chapitre 2: .NET - Exemples de DI purs

    Remarques

    Un exemple d'utilisation de l'injection de dépendance dans .net sans utiliser de conteneur. Basé sur des exemples de Mark Seemann http://blog.ploeh.dk/

    Examples

    Web Api

    public interface ISingleton : IDisposable { } public class TransientDependency { } public class Singleton : ISingleton { public void Dispose() { } } public class CompositionRoot : IDisposable, IHttpControllerActivator { private readonly ISingleton _singleton; // pass in any true singletons i.e. cross application instance singletons public CompositionRoot() { // intitialise any application instance singletons _singleton = new Singleton(); } public void Dispose() { _singleton.Dispose(); } public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { // Per-Request-scoped services are declared and initialized here if (controllerType == typeof(SomeApiController)) { // Transient services are created and directly injected here return new SomeApiController(_singleton, new TransientDependency()); } var argumentException = new ArgumentException(@"Unexpected controller type! " + controllerType.Name, nameof(controllerType)); Log.Error(argumentException, "don't know how to instantiate API controller: {controllerType}", controllerType.Name); throw argumentException; } }

    https://riptutorial.com/fr/home 4

    http://blog.ploeh.dk/

  • public static class DependencyInjection { public static void WireUp() { var compositionRoot = new CompositionRoot(); System.Web.Http.GlobalConfiguration.Configuration.Services.Replace(typeof (IHttpControllerActivator), compositionRoot); } }

    MVC

    public interface ISingleton : IDisposable { } public class TransientDependency { } public class Singleton : ISingleton { public void Dispose() { } } public class CompositionRoot : IDisposable, IControllerFactory { private readonly ISingleton _singleton; // pass in any true singletons i.e. cross application instance singletons public CompositionRoot() { // intitialise any application instance singletons _singleton = new Singleton(); } public void Dispose() { _singleton.Dispose(); } public IController CreateController(RequestContext requestContext, string controllerName) { if (controllerName.ToLower() == "home") { return new HomeController(_singleton, new TransientDependency()); } var argumentException = new ArgumentException(@"Unexpected controller! " + controllerName); Log.Error("don't know how to instantiate MVC controller: {controllerType}. redirecting to help", controllerName); throw argumentException; // Alternatively would return some default Page Not Found placeholder controller; } public SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName) { return SessionStateBehavior.Default; } public void ReleaseController(IController controller) {

    https://riptutorial.com/fr/home 5

  • // anything to clean up? } } public static class DependencyInjection { public static void WireUp() { var compositionRoot = new CompositionRoot(); System.Web.Mvc.ControllerBuilder.Current.SetControllerFactory(compositionRoot); } }

    ASP.NET Core

    dans Startup.cs

    // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); var controllerActivator = new CompositionRoot(); services.AddSingleton(controllerActivator); }

    CompositionRoot.cs

    public class CompositionRoot : IControllerActivator, IDisposable { // Singletons private readonly ISingleton _singleton; public CompositionRoot() { // Create singletons _singleton = new Singleton(); } public object Create(ControllerContext c) => this.Create(c.ActionDescriptor.ControllerTypeInfo.AsType()); public void Release(ControllerContext c, object controller) => (controller as IDisposable)?.Dispose(); public Controller Create(Type type) { // scoped var scoped = new Scoped(); // transient get new()-ed up below if (type == typeof(HomeController)) return new HomeController(_singleton, scoped, new Transient()); throw new InvalidOperationException($"Unknown controller {type}."); } public void Dispose() {

    https://riptutorial.com/fr/home 6

  • // dispose stuff } }

    Lire .NET - Exemples de DI purs en ligne: https://riptutorial.com/fr/dependency- injection/topic/4556/-net---exemples-de-di-purs

    https://riptutorial.com/fr/home 7

    https://riptutorial.com/fr/dependency-injection/topic/4556/-net---exemples-de-di-purs https://riptutorial.com/fr/dependency-injection/topic/4556/-net---exemp