{"id":11497,"date":"2022-09-27T15:38:15","date_gmt":"2022-09-27T10:08:15","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/"},"modified":"2022-09-27T15:38:15","modified_gmt":"2022-09-27T10:08:15","slug":"solved-ioc-container-that-doesnt-require-registration","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/","title":{"rendered":"[Solved] IoC container that doesn&#8217;t require registration"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-51928941\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"51928941\" data-parentid=\"51900295\" data-score=\"1\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>What you&#8217;re looking for is the concept of <strong>Auto-Registration<\/strong>. Most containers allow you to either register types in an assembly based on a <em>convention<\/em>, or do unregistered type resolution and find the missing type for you.<\/p>\n<p>For instance, you can search through an assembly and register all types that match the convention during startup:<\/p>\n<pre class=\"lang-cs prettyprint-override\"><code>var container = new Container();\n\nAssembly assembly = typeof(Thing).Assembly;\n\nvar mappings =\n    from type in assembly.GetExportedTypes()\n    let matchingInterface = \"I\" + type.Name\n    let service = type.GetInterfaces().FirstOrDefault(i =&gt; matchingInterface)\n    where service != null\n    select new { service, type };\n\nforeach (var mapping in mappings)\n{\n    \/\/ Register the type in the container\n    container.Register(mapping.service, mapping.type);\n}\n<\/code><\/pre>\n<p>Using unregistered type resolution, you can make the registration on the fly. How to do this is very much dependent on which container you use. With Simple Injector, for instance, this looks as follows:<\/p>\n<pre class=\"lang-cs prettyprint-override\"><code>var container = new Container();\n\nAssembly assembly = typeof(Thing).Assembly;\n\ncontainer.ResolveUnregisteredType += (s, e)\n{\n    Type service = e.UnregisteredServiceType;\n    if (service.IsInterface)\n    {\n         var types = (\n             from type in asssembly.GetExportedTypes()\n             where service.IsAssignableFrom(type)\n             where !type.IsAbstract\n             where service.Name == \"I\" + type.Name\n             select type)\n             .ToArray();\n\n         if (types.Length == 1)\n         {\n             e.Register(Lifestyle.Transient.CreateRegistration(types[0], container));\n         }          \n    }\n};\n<\/code><\/pre>\n<p>Both methods prevent you from having to update your container configuration constantly.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">7<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved IoC container that doesn&#8217;t require registration <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] What you&#8217;re looking for is the concept of Auto-Registration. Most containers allow you to either register types in an assembly based on a convention, or do unregistered type resolution and find the missing type for you. For instance, you can search through an assembly and register all types that match the convention during startup: &#8230; <a title=\"[Solved] IoC container that doesn&#8217;t require registration\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\" aria-label=\"More on [Solved] IoC container that doesn&#8217;t require registration\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[3145,3146],"class_list":["post-11497","post","type-post","status-publish","format-standard","hentry","category-solved","tag-dependency-injection","tag-ioc-container"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] IoC container that doesn&#039;t require registration - JassWeb<\/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:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] IoC container that doesn&#039;t require registration - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] What you&#8217;re looking for is the concept of Auto-Registration. Most containers allow you to either register types in an assembly based on a convention, or do unregistered type resolution and find the missing type for you. For instance, you can search through an assembly and register all types that match the convention during startup: ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-27T10:08:15+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] IoC container that doesn&#8217;t require registration\",\"datePublished\":\"2022-09-27T10:08:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\"},\"wordCount\":119,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"dependency-injection\",\"ioc-container\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\",\"name\":\"[Solved] IoC container that doesn't require registration - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-09-27T10:08:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] IoC container that doesn&#8217;t require registration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] IoC container that doesn't require registration - JassWeb","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:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] IoC container that doesn't require registration - JassWeb","og_description":"[ad_1] What you&#8217;re looking for is the concept of Auto-Registration. Most containers allow you to either register types in an assembly based on a convention, or do unregistered type resolution and find the missing type for you. For instance, you can search through an assembly and register all types that match the convention during startup: ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/","og_site_name":"JassWeb","article_published_time":"2022-09-27T10:08:15+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] IoC container that doesn&#8217;t require registration","datePublished":"2022-09-27T10:08:15+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/"},"wordCount":119,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["dependency-injection","ioc-container"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/","url":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/","name":"[Solved] IoC container that doesn't require registration - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-09-27T10:08:15+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-ioc-container-that-doesnt-require-registration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] IoC container that doesn&#8217;t require registration"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/11497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=11497"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/11497\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=11497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=11497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=11497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}