{"id":2255,"date":"2020-11-10T22:36:23","date_gmt":"2020-11-10T21:36:23","guid":{"rendered":"https:\/\/gdksoftware.com\/?post_type=knowledge&#038;p=2255"},"modified":"2020-11-11T17:09:56","modified_gmt":"2020-11-11T16:09:56","slug":"dependency-injection-in-delphi","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi","title":{"rendered":"Dependency Injection in Delphi"},"content":{"rendered":"<p>Altijd al willen weten hoe je Dependency Injection met Delphi kunt gebruiken? Ik heb een voorbeeld voor je opgezet waarbij we in een paar stappen van sterk gekoppelde code naar mooie, losgekoppelde code gaan via Dependency Injection en met behulp van interfaces.<\/p>\n<p>We starten met het volgende voorbeeld:<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008800; font-weight: bold;\">unit<\/span> DI1<span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">interface<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">type<\/span>\r\n  TLanguageTools <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TWordApp <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FLanguageTools<span style=\"color: #333333;\">:<\/span> TLanguageTools<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">constructor<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Create<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">implementation<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">constructor<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TWordApp<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">Create<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  FLanguageTools <span style=\"color: #333333;\">:=<\/span> TLanguageTools<span style=\"color: #333333;\">.<\/span>Create<span style=\"color: #333333;\">;<\/span>\r\n\r\n  F<span style=\"color: #333333;\">LanguageTools.<\/span>Translate<span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #888888;\">{ TLanguageTools }<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TLanguageTools<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  <span style=\"color: #888888;\">\/\/<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TLanguageTools<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  <span style=\"color: #888888;\">\/\/<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">.<\/span>\r\n<\/pre>\n<\/div>\n<p>Zoals je kunt zien is er in principe niets mis met de code. Het is valide Delphi code en het werkt. Echter, er zijn wel een paar kanttekeningen te plaatsen. Als eerste is de code sterk gekoppeld; de class TWordApp is niet alleen afhankelijk van de TLanguageTools class, maar je kunt de TLanguageTools class niet eens uitbreiden met extra functionaliteit. Ook al zou je de class TLanguageTools overriden met bijvoorbeeld TEnglishLanguageTools, dan nog gebruikt de TWordApp gewoon de base class TLanguageTools.<\/p>\n<p>Dat kan beter! Een eerste flinke verbetering is door de afhankelijkheid (de dependency) uit de constructor Create te halen, en deze te injecteren. Een dependency injecteren kan op meerdere manieren, via properties, procedures of via constructors. In dit voorbeeld maak ik gebruik van de constructor. De onderstaande code heeft al een iets losser gekoppende afhankelijkheid tussen de twee classes:<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008800; font-weight: bold;\">unit<\/span> DI2<span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">interface<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">type<\/span>\r\n  TLanguageTools <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TWordApp <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FLanguageTools<span style=\"color: #333333;\">:<\/span> TLanguageTools<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">constructor<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Create<\/span>(ALanguageTools<span style=\"color: #333333;\">:<\/span> TLanguageTools)<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">implementation<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">constructor<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TWordApp<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">Create<\/span>(ALanguageTools<span style=\"color: #333333;\">:<\/span> TLanguageTools)<span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  FLanguageTools <span style=\"color: #333333;\">:=<\/span> A<span style=\"color: #333333;\">LanguageTools;<\/span>\r\n\r\n  FLanguageTools<span style=\"color: #333333;\">.<\/span>Translate<span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n\r\n<span style=\"color: #888888;\">{ TLanguageTools }<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TLanguageTools<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  <span style=\"color: #888888;\">\/\/<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TLanguageTools<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  <span style=\"color: #888888;\">\/\/<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">.<\/span>\r\n<\/pre>\n<\/div>\n<p>Zoals je in het voorbeeld kunt zien maken we nog steeds gebruik van de TLanguageTools class. Echter, het is nu mogelijk om deze TLanguageTools class te overriden, en die nieuwe class mee te geven aan de TWordApp class. En eigenlijk is dit de basis van Dependency Injection. Je code is veel losser gekoppeld en beter herbruikbaar.<\/p>\n<p>Door middel van interfaces kunnen we nog een stapje verder gaan. Het is namelijk mogelijk om de functionaliteit van de TLanguageTools class te beschrijven in verschillende interfaces, en deze door te geven aan de TWordApp class. Op deze manier programmeren we namelijk tegen abstracties, en niet tegen implementaties.<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008800; font-weight: bold;\">unit<\/span> DI3<span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">interface<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">type<\/span>\r\n  IGrammarChecker <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">interface<\/span>\r\n    [<span style=\"background-color: #fff0f0;\">'{FED7BA76-0EDE-40E7-BABB-16BCFE76F6DF}'<\/span>]\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  ITranslator <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">interface<\/span>\r\n    [<span style=\"background-color: #fff0f0;\">'{C1F1092F-3589-49E5-8F22-33E8D7587A8B}'<\/span>]\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n\r\n  TLanguageTools <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>(TInterfacedObject<span style=\"color: #333333;\">,<\/span> IGrammarChecker<span style=\"color: #333333;\">,<\/span> ITranslator)\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TWordApp <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FTranslator<span style=\"color: #333333;\">:<\/span> ITranslator<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">constructor<\/span> <span style=\"color: #0066bb; font-weight: bold;\">Create<\/span>(ATranslator<span style=\"color: #333333;\">:<\/span> ITranslator)<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">implementation<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">constructor<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TWordApp<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">Create<\/span>(ATranslator<span style=\"color: #333333;\">:<\/span> ITranslator)<span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  FTranslator <span style=\"color: #333333;\">:=<\/span> ATranslator<span style=\"color: #333333;\">;<\/span>\r\n\r\n  FTranslator<span style=\"color: #333333;\">.<\/span>Translate<span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TLanguageTools<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">CheckGrammar<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  <span style=\"color: #888888;\">\/\/<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #bb0066; font-weight: bold;\">TLanguageTools<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #0066bb; font-weight: bold;\">Translate<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">begin<\/span>\r\n  <span style=\"color: #888888;\">\/\/<\/span>\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n<span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">.<\/span>\r\n<\/pre>\n<\/div>\n<p>Zoals je ziet is de TWordApp class nu helemaal niet meer afhankelijk van de TLanguageTools class. Zolang we aan de constructor een instantie met een implementatie van de interface ITranslator doorgeven zal de code gewoon werken. We hebben nu dus niet eens de class TLanguageTools meer nodig.<\/p>\n<p>Dus, met behulp van Dependency Injection en met interfaces krijgen we mooie, losgekoppelde, en goed onderhoudbase code.<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":{"0":"post-2255","1":"knowledge","2":"type-knowledge","3":"status-publish","4":"hentry","5":"knowledge-category-delphi","7":"knowledge-category-software-development","8":"knowledge-category-software-ontwikkeling"},"acf":{"author":414,"type_hero":"compact","hero_image":2256,"hero_image_position":"","hero_title":"","hero_content":"","hero_link":null,"hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Dependency Injection in Delphi door middel van interfaces<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dependency Injection in Delphi\" \/>\n<meta property=\"og:description\" content=\"Altijd al willen weten hoe je Dependency Injection met Delphi kunt gebruiken? Ik heb een voorbeeld voor je opgezet waarbij we in een paar stappen van sterk gekoppelde code naar mooie, losgekoppelde code gaan via Dependency Injection en met behulp van interfaces. We starten met het volgende voorbeeld: unit DI1; interface type TLanguageTools = class [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2020-11-11T16:09:56+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/dependency-injection-in-delphi\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/dependency-injection-in-delphi\",\"name\":\"Dependency Injection in Delphi door middel van interfaces\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\"},\"datePublished\":\"2020-11-10T21:36:23+00:00\",\"dateModified\":\"2020-11-11T16:09:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/dependency-injection-in-delphi#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/dependency-injection-in-delphi\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/dependency-injection-in-delphi#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank-categorie\\\/delphi\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Dependency Injection in Delphi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/nl?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dependency Injection in Delphi door middel van interfaces","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi","og_locale":"nl_NL","og_type":"article","og_title":"Dependency Injection in Delphi","og_description":"Altijd al willen weten hoe je Dependency Injection met Delphi kunt gebruiken? Ik heb een voorbeeld voor je opgezet waarbij we in een paar stappen van sterk gekoppelde code naar mooie, losgekoppelde code gaan via Dependency Injection en met behulp van interfaces. We starten met het volgende voorbeeld: unit DI1; interface type TLanguageTools = class [&hellip;]","og_url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi","og_site_name":"GDK Software","article_modified_time":"2020-11-11T16:09:56+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"3 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi","url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi","name":"Dependency Injection in Delphi door middel van interfaces","isPartOf":{"@id":"https:\/\/gdksoftware.com\/nl#website"},"datePublished":"2020-11-10T21:36:23+00:00","dateModified":"2020-11-11T16:09:56+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/dependency-injection-in-delphi#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/nl"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/nl\/kennisbank"},{"@type":"ListItem","position":3,"name":"Delphi","item":"https:\/\/gdksoftware.com\/nl\/kennisbank-categorie\/delphi"},{"@type":"ListItem","position":4,"name":"Dependency Injection in Delphi"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/nl#website","url":"https:\/\/gdksoftware.com\/nl","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/nl?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge\/2255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/team\/414"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/media?parent=2255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}