æ°ãæåãASP.NET CoreããŸã RC1ã«ãã£ããšãã«ããã¹ããããžã§ã¯ããMVC 5ããASP.NET Coreã«ç§»è¡ããæåã®åä»ãªè©Šã¿ãããŸããã åœæããããžã§ã¯ãã§ã¯ãã§ã«Simple Injectorã®IOCã©ã€ãã©ãªã䜿çšããŠãããããrc1ã§ãµããŒããããŠããããããã®ã©ã€ãã©ãªãåŒãç¶ã䜿çšããããšèããŸããã ãã®ã©ã€ãã©ãªã®æ°ããããŒãžã§ã³ã®ãªãªãŒã¹ããã©ããŒããŸããããæ¯èŒçæè¿ãããŒãå¥ããã°Simple Injectorã«æçš¿ãããããªãè峿·±ãèšäºã«åºäŒããŸããã ãã®èšäºã¯é©åãªã©ã€ãã©ãªã«äŸåããŠããŸããããã®äž»ãªäŸ¡å€ã¯ãããäžè¬çãªåé¡-ASP.NET Coreã®æ°ããDIæœè±¡åãæèµ·ããããšã§ãã
Simple Injectorã©ã€ãã©ãªã®IOC èšäº
æçš¿è
Steve
翻蚳ã®èª€ããäžæ£ç¢ºããææããŠããã ããã°å¹žãã§ããé廿°å¹ŽéãMicrosoftã¯ãã©ãããã©ãŒã ã®æ°ããããŒãžã§ã³ãéçºããŠããŸããã NETïŒ.NET Core .NET Coreã¯ãæ¢åã®.NETãã©ãããã©ãŒã ã®å®å
šãªåèšèšã§ãããçã®ã¯ãã¹ãã©ãããã©ãŒã äºææ§ãšã¯ã©ãŠããã¯ãããžãŒãšã®äºææ§ãç®æããŠããŸãã .NET Coreã®éçºãå³å¯ã«è¿œè·¡ããRC1以éããã©ãããã©ãŒã äºæããŒãžã§ã³ã®Simple InjectorããªãªãŒã¹ããŸããã Simple Injector v3.2ã®ãªãªãŒã¹ã§ã¯ã.NET Coreãå
¬åŒã«ãµããŒãããŠããŸãã
ãæ°ã¥ããããããŸããããMicrosoftã¯ãã¬ãŒã ã¯ãŒã¯ã®ã³ã¢ã³ã³ããŒãã³ãã®1ã€ãšããŠç¬èªã®DIã©ã€ãã©ãªã远å ããŸããã 誰ãããã€ãã«ïŒããšå«ã¶ãããããŸããã ãã®ãããªã³ã³ããŒãã³ããååšããªãããã.NETã®å€ãã®ãªãŒãã³ãœãŒã¹DIã©ã€ãã©ãªãçºçããŸããã ãããŠãSimple Injectorã¯æããã«ãããã®1ã€ã§ãã
誀解ããªãã§ãã ãããMicrosoftã.NETã®äž»ãªãã©ã¯ãã£ã¹ãšããŠDIãæšé²ããŠããããšã«æè¬ããŠããŸããããã«ãããDIãå®è·µããããã«å€ãã®éçºè
ãç»å Žããæ¥çã«ãã©ã¹ã®åœ±é¿ãäžããå¯èœæ§ããããŸãã ãã ããåé¡ã¯ãMicrosoftãçµã¿èŸŒã¿ã®DIã³ã³ããã®äžã«å®çŸ©ããæœè±¡åããå§ãŸããŸãã 以åã®
Resolveæœè±¡åïŒ
IDependencyResolverããã³
IServiceProvider ïŒãšæ¯èŒããŠãæ°ããæœè±¡åã¯
IServiceCollectionã®äžã«
Register APIã远å ã
ãŸã ã ãã®Microsoftã®æœè±¡åã®æ¬è³ªã¯ãä»ã®ïŒããæ©èœãè±å¯ãªïŒDIã©ã€ãã©ãªããã©ãããã©ãŒã ã«æ¥ç¶ã§ããã¢ããªã±ãŒã·ã§ã³ããµãŒãããŒãã£ããŒã«ãããã³ãã¬ãŒã ã¯ãŒã¯ã®éçºè
ãæšæºåãããæœè±¡åã䜿çšããŠäŸåé¢ä¿ãç»é²ããããšã§ãã ããã«ãããã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ãéžæããDIã©ã€ãã©ãªãçµ±åããããã®æšæºãååŸã§ããŸãã
äžèŠãããšããã®ãããªæœè±¡åãæã€ããšã¯è¯ãèãã®ããã«æãããããããŸããã äžè¬çã«èšãã°ããœãããŠã§ã¢æ¥çã«ã¯ïŒè¿œå ã®ïŒæœè±¡åã¬ãã«ã远å ããŠã解決ã§ããªãåé¡ã¯ã»ãšãã©ãããŸããã ãã®å ŽåãMicrosoftã®æšè«ã¯èª€ãã§ãã DIã®å°éå®¶ã¯ãæåãããã®åé¡ã«ã€ããŠèŠåããŠããŸãããã圹ã«ç«ã¡ãŸããã§ããã
ããŒã¯ã»ã·ãŒãã³ã¯ã
ããã§ãã®ã¢ãããŒãã®åé¡ãããªãæ£ç¢ºã«èª¬æããŸããããç§ã®æèŠã§ã¯ã次ã®éèŠãªç¹ã匷調ããããšãã§ããŸãïŒ
- ãã®ã¢ãããŒãã¯ãæå°å
¬çŽæ°ã«åãã£ãŠåŒããŸãã
- ãã®ã¢ãããŒãã¯ã€ãããŒã·ã§ã³ãæå¶ããŸã
- ãã®ã¢ãããŒãã¯ããŒãžã§ãã³ã°å°çã远å ããŸã
- DIã³ã³ããã䜿çšããªããšäœæ¥ãé£ãããªããŸã
- ã¢ããã¿ãŒã®éçºããªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã®ã¡ã³ããŒã«ãã£ãŠåŠçãããå Žåããããã®ã¢ããã¿ãŒã¯ç°ãªãã¬ãã«ã®å質ãæã¡ã Conforming Containerã®ææ°ããŒãžã§ã³ãšäºææ§ããªãå¯èœæ§ããããŸãïŒçŽã ããã§èª¬æãããã³ãã¬ãŒããåç
§ïŒ
ãããã¯ã.NET Coreã®æ°ããDIæœè±¡åã§ä»æ¥çŽé¢ããçã®èª²é¡ã§ãã DIã³ã³ããã¯ã
ç»é²APIã«é¢ããŠéåžžã«ãŠããŒã¯ã§äºææ§ã®ãªãæ©èœãåããŠããããšããããã
ãŸã ã ããšãã°ãSimple Injectorã¯ã倿°ã®æ§æãšã©ãŒãæ€åºããããã«éåžžã«æ
éã«èšèšãããŠããŸãã æãé¡èãªäŸã®1ã€ïŒããã«å€ãã®äŸããããŸãïŒã¯
ã圌ã®èšºæèœåã§ãã ããã¯ãDIæœè±¡åã®ãŠãŒã¶ãŒãæã€æåŸ
ãšåºæ¬çã«äºææ§ã®ãªãæ©èœã®1ã€ã§ãã ãããããŠãŒã¶ãŒã¯æ°ããæœè±¡åã«äœãæåŸ
ããŸããïŒ
DIæœè±¡åãŠãŒã¶ãŒã¯ã3ã€ã®ã°ã«ãŒãã«åé¡ã§ããŸãããã¬ãŒã ã¯ãŒã¯ã®éçºè
ãå€éšã©ã€ãã©ãªãããã³ã¢ããªã±ãŒã·ã§ã³èªäœã ç¹ã«ãã¬ãŒã ã¯ãŒã¯ãšå€éšã©ã€ãã©ãªã®éçºè
ã¯ãäžè¬çãªæœè±¡åãéããŠäŸåé¢ä¿ã®ç»é²ã远å ããããšèããŠããŸãã ããã2ã€ã®éçºè
ã°ã«ãŒãã§ã¯ã䜿çšå¯èœãªãã¹ãŠã®ã¢ããã¿ãŒã§ã³ãŒããæ€èšŒããããšã¯ã»ãŒäžå¯èœã§ãããããçµã¿èŸŒã¿ã³ã³ãããŒã䜿çšããŠã³ãŒãããã¹ãããŸãã ãããŠããããã®éçºè
ã¯ãã«ãã€ã³ã³ã³ããã䜿çšããŸãããã©ã®ã¢ããã¿ã䜿çšããŠãããã«ãã€ã³ã³ã³ããããæšæºçãªåäœãæé»çã«æåŸ
ããŸãïŒãããããããã¹ãã§ãïŒã ã€ãŸãããã®ã€ã³ã©ã€ã³ã³ã³ããã¯ãã³ã³ãã©ã¯ããšæœè±¡åã®äž¡æ¹ã®åäœãå®çŸ©ããŸãã äœæãããåã¢ããã¿ãŒã¯ãçµã¿èŸŒã¿ã³ã³ãããŒã®æ£ç¢ºãªã¹ãŒããŒã»ããã§ãªããã°ãªããŸããã æšæºããã®éžè±ã¯èš±å¯ãããŸãããããã«ãããçµã¿èŸŒã¿ã³ã³ããã®ããã©ã«ãã®åäœã«äŸåããå€éšã©ã€ãã©ãªã®æäœãäžæãããããã§ãã
Simple Injectorã®èšºæãšæ€èšŒã¯ãéçºã®çç£æ§ã倧å¹
ã«åäžãããå€ãã®æ©èœã®1ã€ã§ãã ä»ã®DIã©ã€ãã©ãªã䜿çšããå Žåãéçºããã»ã¹ã®ãã£ãšåŸã«çºèŠãããå¯èœæ§ã®ããåé¡ãèŠã€ããããšãã§ããŸãã ãã ãã蚺æãšã¢ããªã±ãŒã·ã§ã³ãããã³ãµãŒãããŒãã£ã³ã³ããŒãã³ããå®è¡ãããšåé¡ãçºçããŸãããµãŒãããŒãã£ã³ã³ããŒãã³ããSimple Injector蚺æã§èªåçã«ãã«ãŒã«ã«åŸã£ãŠãåäœããããšã¯ã»ãšãã©ãããŸããã æšæºã®ã³ã³ããã䜿çšããç¹å¥ãªå Žåã«ç»é²ãïŒããŸãè¡ãã°ïŒãã¹ããããšããŠããSimple InjectorãçããããšèŠãªããããªæ¹æ³ã§äŸåé¢ä¿ãç»é²ããå¯èœæ§ããããŸãã Simple Injectorã®ä»®æ³ã¢ããã¿ãŒããµãŒãããŒãã£ã®äŸåé¢ä¿ãšã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã®ç»é²ãåºå¥ããããšã¯äžå¯èœã§ãã 蚺æãç¡å¹ã«ãããšãæãéèŠãªå®å
šã¡ã«ããºã ã®1ã€ãå®å
šã«åé€ãããŸããã蚺æãä¿åãããšããµãŒãããŒãã£ã³ã³ããŒãã³ãããã®èª€æ€åºãçºçãããããã®èª€æ€åºã¯ã¢ããªã±ãŒã·ã§ã³éçºè
ã«ãã£ãŠæå¶ãããå¿
èŠããããŸãã ãµãŒãããŒãã£ã®ã³ã³ããŒãã³ãã®ç»é²ã¯ã»ãšãã©ã¢ããªã±ãŒã·ã§ã³éçºè
ããé ãããŠãããããããããã¹ãŠã®åé¡ã«åãçµãããšã¯é£ãããã€ã©ã€ã©ãããããæã«ã¯äžå¯èœã«ãªãããšãããããŸãã ããã¯è°è«ããããšãã§ããŸã-ãŸããã·ã³ãã«ã€ã³ãžã§ã¯ã¿ãŒã¯ãµãŒãããŒãã£ã®ããŒã«ã§åé¡ãèŠã€ããŸãã ãããããµãŒãããŒãã£ã©ã€ãã©ãªã®éçºè
ã«é£çµ¡ããŠãåé¡ãã説æããããšãããšããäºææ§ã®ãªããã¢ããã¿ãéçºããããšã¯ãæããããªã®ã§ã圌ãã¯ããããç§ãã¡ã«ç¢ãåããŸãã
Simple Injectorã®èšºææ©èœã¯ã.NET Core DIæœè±¡åçšã®ã¢ããã¿ãŒãäœæãããšãã«ééããå€ãã®éäºææ§ã®1ã€ã§ãã ãã®ä»ã®éäºææ§ïŒ
Simple Injectorãšå®å
šã«äºææ§ã®ããã¢ããã¿ãŒãäœæããã«ã¯ããã¬ãŒã ã¯ãŒã¯ã®å€ãã®æåãªæ©èœãåé€ããå¿
èŠããããŸããããã«ãããã©ã€ãã©ãªãŒã®æ¢åã®åäœã倿Žãããéçºã®æéãšãªã£ãååã«éåãããã®ã«å€ãããŸãã é
åã®ãªããœãªã¥ãŒã·ã§ã³ã äºææ§ãæãªã倿Žã«ã€ãªããã ãã§ãªããSimple Injectorãšéçºè
ããããæ°ã«å
¥ã£ãŠããæ©èœãšåäœãæ¶ããŸãã ãã®æå³ã§ã
Markã説æããããã«ãã¢ããã¿ãŒãæã€ããšã¯
ãæ¯èŠããã€ãããŒã·ã§ã³ãã§ãã Simple Injectorã§ã¯å€ãã®é©æ°ãè¡ã£ãŠãããã¢ããã¿ãŒã«ããSimple Injectorã¯ãŠãŒã¶ãŒã«ãšã£ãŠå®è³ªçã«åœ¹ã«ç«ããªããªããŸãã ãŸããã¢ããã¿ãŒã«ããããããªãæ¹åã驿°ãè¡ãããšãã§ããªããªããŸãã Simple Injectorã®å²åŠãéæ¿ã ãšèãã人ããããããããŸããããç§ãã¡ã¯éã£ãèãæ¹ãããŠããŸãã ãŠãŒã¶ãŒã«æãé©ããŠãããšèããããæ¹æ³ã§èšèšããŸããã ãŸãã
NuGetããã±ãŒãžã®ããŠã³ããŒãæ°ã¯ãå€ãã®éçºè
ãåæããŠããããšã瀺ããŠããŸãã ç¹å®ã®ã¢ããã¿ãŒã«æºæ ããŠãããšããŠãŒã¶ãŒã®ããŒãºãããã«æºããããšãã§ããªããªããŸãã
Simple Injectorã®ããžã§ã³ã¯ä»ã®ã»ãšãã©ã®ã³ã³ãããããæšæºããéžè±ããå¯èœæ§ããããŸãããå°æ¥ã®DIã©ã€ãã©ãªã®äžè¬çãªæœè±¡åã®å®çŸ©
ãã®ãã®ã¯ãå°æ¥ã®ã©ã€ãã©ãªã®
ãã€ãããŒã·ã§ã³ãæå¶ããããšãããããæ¥é²çãŸãã¯é©æ°çãªèŠç¹ã§ãã Simple InjectorãæäŸããã®ãšåããã§ãã¯ãå°å
¥ããä»ã®ã³ã³ããã®1ã€ãæ³åããŠãã ããã ãã®ãããªæ©èœã¯ãDIæœè±¡åã®å¥çŽã«éåããªãéãå°å
¥ã§ããŸããã ãã®ãããªã¢ããã¿ãŒãæã£ãŠãããšããåãªãäºå®ã¯ãç§ãã¡ã®æ¥çã®é²æ©ã劚ããå¯èœæ§ããããŸãã
ãã®èª¬æã§ãMicrosoft DIæœè±¡åã¯ãæäœå
¬çŽæ°ãã§ã¯ãªãããšãæããã«ããããšæããŸãããæäœå
¬åæ¯ãã¯ãã¹ãŠã®DIã©ã€ãã©ãªãšã®äºææ§ãæå³ããããã§ãã
ããã§è¿°ã¹
ãããã«ãæ¢åã®DIã©ã€ãã©ãªã¯ã©ãããã®æœè±¡åãšå®å
šã«äºææ§ããªãå¯èœæ§ããããŸãã éšåçã«ãããã¯ãçµã¿èŸŒã¿ã³ã³ãããŒãæœè±¡åã³ã³ãã©ã¯ããå®çŸ©ããŠããã«ããããããããã®æœè±¡åã®ãã¹ããå«ããããžã§ã¯ãã«ã¯ããã¹ãŠã®ã·ããªãªã§æ£ç¢ºãªåäœãå®å
šã«æ±ºå®ããããªãã®æ°ã®ãã¹ãã±ãŒã¹ããªããšããäºå®ã«èŠçŽãããŸãã ãããŸã§ããã¹ãŠã®ã¢ããã¿ãŒå®è£
ã¯ãã¢ããã¿ãŒå®è£
ãçµã¿èŸŒã¿ã³ã³ãããŒã®åäœãšã»ãŒåæããŠããããšãæšæž¬ããæåãæåŸ
ãã詊ã¿ã§ããã ããšãã°ãAutofacéçºè
ã¯ãããªãæ·±å»ãªäºææ§ã®åé¡ãããããšã«
æ°ã¥ã ãæçµçã«
㯠ç§ãã¡ ãšåãçµè«ã«éããŸã
ã ã
Microsoft DIã©ã€ãã©ãªã«æ©èœãè±å¯ã§ãSimple Injectorã®æ€èšŒã蚺æãªã©ã®æ©èœãå«ãŸããŠããã°ãããã»ã©æªãã¯ãããŸããã æ¬¡ã«ããã¹ãŠã®æ©èœãåããåãDIã©ã€ãã©ãªã䜿çšã§ããŸãã æ®å¿µãªãããå®è£
ã¯ããã»ã©æ©èœãè±å¯ãšããããã§ã¯ãªããMicrosoftèªèº«
ã¯å®è£
ãæ¬¡ã®
ããã«èª¬æããŸããã
æå°éã®DIã³ã³ããã远å ã®æ³šå
¥æ©èœãå¿
èŠãªãå Žåã«äŸ¿å©ããã«æªãããšã«ãã€ã³ã©ã€ã³ã³ã³ããã¯æœè±¡åã³ã³ãã©ã¯ããå®çŸ©ãããããã€ã³ã©ã€ã³ã³ã³ããã«æ°ããæ©èœã远å ãããšãæ¢åã®ãã¹ãŠã®ã¢ããã¿ãŒãç ŽæããŸãã æœè±¡åã䜿çšãããµãŒãããŒãã£ã®éçºè
ã¯ãçµã¿èŸŒã¿ã©ã€ãã©ãªïŒ.NET Coreã®DIïŒã䜿çšããŠïŒåœŒã®ã©ã€ãã©ãªïŒã®ã¿ããã¹ãããŸãã ãŸãããµãŒãããŒãã£ã®éçºè
ã®ã©ã€ãã©ãªããã¢ããã¿ã§ãŸã ãµããŒããããŠããªãçµã¿èŸŒã¿ã³ã³ããã«è¿œå ãããæ©èœã«äŸåãå§ãããšãäœããå£ããŠã¢ããªã±ãŒã·ã§ã³éçºè
ãèŠããããšã«ãªããŸãã ããã¯ã
Mark Seemannã圌ã®ããã°ã§è°è«ããŠããããŒãžã§ã³ç®¡çã®å°çã®äžåŽé¢ã§ãã å°ãªããšãMicrosoftã倿Žãå ãããã³ã«ã¡ãžã£ãŒããŒãžã§ã³çªå·ãå¢ããããšãé¡ã£ãŠããŸãã çŸåšã®å®è£
ã
ããããã«ãã§ããã ãã§ãªããå®å
šã«äœ¿çšå¯èœãªå€æ©èœDIã³ã³ãããŒã«çºå±ããããšã¯æ±ºããŠãããŸããããªããªãããããã¯è¿œãè©°ããããŠããããã§ããå°æ¥ã®ãã¹ãŠã®å€æŽã¯äºææ§ãå£ã倿Žã§ããã誰ããæªããªããŸãã
æåã®è§£æ±ºçã¯ãæœè±¡åãšãã®ã¢ããã¿ãŒã®äœ¿çšãå®å
šã«é¿ããããšã§ãã
Mark Seemannã ãããš
ããã§éåžžã«æ£ç¢ºã«èª¬æã
ãããã« ãã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã¯DIã³ã³ããããŸã£ãã䜿çšããå¿
èŠããªããããããŸããã æ®å¿µãªãããæœè±¡åãå®çŸ©ãããšããäºå®ããæœè±¡åã®äœ¿çšãé¿ããããšãã¯ããã«é£ããããŠããŸãã æœè±¡åãå®çŸ©ãããã®äœ¿çšãç©æ¥µçã«æšé²ããããšã«ãããMicrosoftã¯ã©ã€ãã©ãªããã³ãã¬ãŒã ã¯ãŒã¯ã®æ°åã®ãµãŒãããŒãã£éçºè
ãå°ããã©ã€ãã©ãªããã³ãã¬ãŒã ã¯ãŒã¯ã®é©åãªæœè±¡åã®å®çŸ©ã«ã€ããŠèããããšããããããŸãïŒ
Mark Seemannã®èšäºã¯ãããæç¢ºã«èª¬æããŠããŸãïŒ ãã€ã¯ããœããã¯ãäžçå
šäœã1ã€ã®å
±éã®æœè±¡åãå¿
èŠãšããŠãããšMicrosoftã«ä¿¡ãããããããéçºè
ã¯ãã¯ãããã«ã€ããŠèããŸããã MVCã®æ°ãããã¡ã¯ããªã€ã³ã¿ãŒãã§ãŒã¹ãéåžžã«é
ãææã«ç»å Žããããšã¯ãã§ã«èŠãŸããïŒããšãã°ãRC2ããåã®
IViewComponentActivatoræœè±¡åãšããŠïŒã ãããŠãMVCããŒã ããã®ãããªãšã©ãŒãéçºãµã€ã¯ã«ã®ãã®ãããªåŸææ®µéã«ããããããšãããã£ãå Žåãæ°ãã.NETãã©ãããã©ãŒã ã§éçºãéå§ãããã¹ãŠã®éçºè
ã«äœãæåŸ
ã§ããŸããïŒ
ãããã«
DIæœè±¡åãå®çŸ©ããããšã¯ãä»åŸæ°å¹Žéç§ãã¡ãæ©ãŸããMicrosoftã®çãŸããééãã§ãã ããã¯ãã§ã«é©æ°ãæå¶ããããŒãžã§ã³ç®¡çã®å°çãçã¿åºããå€ãã®éçºè
ãæ··ä¹±ãããŸãã æœè±¡åã¯å€ãã®DIã©ã€ãã©ãªãšäºææ§ããªããå°éå®¶ã®æšå¥šã«åããŠãMicrosoftã¯äžçãäºææ§ã®ãªãã³ã³ãããšéšåçã«äºææ§ã®ããã³ã³ããã«åå²ããããšã§ãããç¶æããããšã決å®ããŸãããããã«ãããDIæœè±¡åãå®è£
ããã¢ããã¿ãšãã®æœè±¡åã䜿çšãããµãŒãããŒãã£ã©ã€ãã©ãªã«é¢ããåé¡ã®ç¡éã®å ±åã«ã€ãªãããŸãã
ã¢ããªã±ãŒã·ã§ã³éçºè
ãšããŠã®ç§ãã¡ã®æèŠã§ã¯ãã¢ããã¿ãŒã®äœ¿çšã¯æ§ããã¹ãã§ãã
次ã®èšäºã§ã¯ãããã«ã¢ãããŒãããæ¹æ³ãšãäºææ§ã®ãªãã³ã³ãããŒããªããŠãããããä¿¡é Œã§ããæ¹æ³ã§ããçç±ã«ã€ããŠè©³ãã説æããŸãã
é£çµ¡ãåãåããŸãããã