StructureMapã¯ãä»ã®DI \ IoCå®è£ ããã䟿å©ãªããã«æããã ãã§ãªããGoogleã§StructureMapãšUnityãå ¥åããã ãã§ã人ã ãStructureMapãæã䟿å©ã§æè»ã§èªç¶ãªä»äºã§ããããšãæ確ã«è°è«ããå®èšŒãããªã³ã¯éãå ¥æã§ããŸãã
1ã2ã3ããªã³ã¯ããŸãã ããã«ãStructureMapã¯éåžžã«é«éã§ãã
以äžã«ããã¬ãŒã ã¯ãŒã¯ãæ¯èŒããéåžžã«èå³æ·±ãè³æã®ã³ã¬ã¯ã·ã§ã³ã瀺ããŸãhttp://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net
ãã®ãããªã³ã³ããããããžã§ã¯ãã§äœ¿çšããå¿ èŠããããã©ãããããã³ç¬èªã®å®è£ ãäœæãã䟡å€ããããã©ããã«ã€ããŠã®è°è«ã¯çç¥ã§ãããšæããŸãã æåã®ç§ã®å®è·µã§ã¯ãèœåãšå©äŸ¿æ§ã®ç¹ã§èããå£ãèªå·±èšè¿°åã®å®è£ ããã£ãããšããããŸãããããããã¯ç¹å®ã®ã¿ã¹ã¯ã解決ããããã§ååã§ããã ãããžã§ã¯ãã®éçºã«äŒŽãããã¹ãŠãä»ã®æè¡ã«ç§»è¡ããæéãäžè¶³ããŠããŸããã ãã®åŸãUnityãUnityããããŸããããçµå±ãStructureMapãè©ŠããŠã¿ãå¿ èŠããããäžåºŠãåŸæããªãã£ããšããçµè«ã«éããŸããã
ç§ã®æèŠã§ã¯ãStructureMapã®å©ç¹ã¯äœã§ããïŒ
- DSLã»ããã¢ãã
- ãã¹ãŠã®éåžžã«æè»ãªã«ã¹ã¿ãã€ãº
- 䜿ãããã
- å éšé¢ä¿ããã§ãã¯ããæ©äŒ
- ããã«äœ¿ãããã¹ãã®ãµããŒã
StructureMapã«ã¯ãŸã å€ãã®èå³æ·±ãæçšãªãã®ããããŸããããããããã©ã¹ã«åž°ããã®ã¯ééã£ãŠããŸãã人çã楜ã«ããã ãã®æ¥œããè¿œå ãšåŒã¶æ¹ãè¯ãã§ãããã
ãã©ããŒã¢ããè³æã®æŠèŠã¯æ¬¡ã®ãšããã§ãã
- èšçœ®
- ç»é²ïŒåºæ¬ããããã¡ã€ã«ããã©ã°ã€ã³ãã¹ãã£ã³ãå±éïŒ
- ã³ã³ã¹ãã©ã¯ã¿ãŒïŒåçŽåãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãè€ååã匷å¶ãåŒæ°ã®èšå®ïŒ
- ããããã£ïŒåçŽãªããããã£èšå®ãçµã¿èŸŒã¿ã®ããããã£èšå®ããã¬ãŒã ã¯ãŒã¯ã䜿çšããããããã£ã®èšå®ãæ¢åã®ã¯ã©ã¹ã®æ¡åŒµïŒ
- ã©ã€ãã¿ã€ã
- ã€ã³ã¿ãŒã»ãã¿ãŒïŒOnCreationãEnrichWithïŒ
- ãžã§ããªãã¯å
- å±æ§ïŒDefaultConstructorãValidationMethodããã®ä»ãã¹ãŠïŒ
- ãã¹ã
StructureMapãã€ã³ã¹ããŒã«ãã
NuGetã䜿çšããŠãStructureMapãã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ã¹ããŒã«ããããšããå§ãããŸãã ããã±ãŒãžãããŒãžã£ãŒã³ã³ãœãŒã«ïŒinstall-Package StructureMapïŒã®1ã€ã®ã³ãã³ãããŸãã¯ãŠã£ã¶ãŒãã䜿çšããæ€çŽ¢ãšã€ã³ã¹ããŒã«ãããããååŸããæãç°¡åãªæ¹æ³ã§ãã ãã ããå¿ èŠã«å¿ããŠãå ¬åŒããŒãžhttp://github.com/structuremap/structuremap/downloadsãããããžã§ã¯ããããŠã³ããŒãã§ããŸãã
ç»é²
ãããããIoCã³ã³ããã«ãšã£ãŠæãéèŠãªã¢ã¯ã·ã§ã³ã¯ç»é²ã§ãã ããã¯ããããããã«äŸ¿å©ã§ç解ãããããã人ã ãããã䜿çšãããã©ããããããŠããŒã«ã®äžé©åãªäœ¿çšã®å¯èœæ§ã«äŸåããŸãã
èè ã¯ãDSLãã§ããã ãåºã䜿çšããæ¥ç¶æååãURLããã¡ã€ã«ãã¹ãããã³ãã®ä»ãã¹ãŠãåãããã«åå¥ã«èšå®ããå¿ èŠãããå Žåã«ã®ã¿ãæ§æãã¡ã€ã«ã«é Œãããšããå§ãããŸãã
æãåçŽãªãã®ããå§ããŸããããããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ã©ã¹ãç»é²ããŸãã
ãã®ãããªåçŽãªã¯ã©ã¹ã»ããããããšããŸãã
public interface IClass {} public interface IClass1 : IClass {} public interface IClass2 : IClass {} public class Class1 : IClass1 {} public class Class2 : IClass2 {}
ãããŸã§ã®ãšããããã®ã»ãããå¯èœæ§ãå®èšŒããäž»ãªãã®ã«ãªããŸãã ããããå¿é ããªãã§ãã ããããã以äžã®ã¯ã©ã¹ãšæ¥ç¶ã¯ããé£ãããªããŸãããã®ãããªã¯ã©ã¹ã§ãããŸã衚瀺ãããªãããã§ãã
ããŒã¹
ç»é²ã¯ã Containerã䜿çšããŠãéçObjectFactoryã¯ã©ã¹ã䜿çšããŠããŸãã¯Registryã¯ã©ã¹ã䜿çšããŠå¯èœã§ãã ããããã¹ãŠã®ãªããžã§ã¯ãã䜿çšããŠãç»é²ãåŸã ã«æ€èšããŠãã ããã ç»é²ã®äž»ãªã¯ã©ã¹ã¯ã¬ãžã¹ããªã§ãããæ®ãã®ã¯ã©ã¹ã¯äŸ¿å®äžããã®æ©èœãã¹ããŒããŸãã
éçObjectFactoryã¯ã©ã¹ã«ç»é²ããŸãã
public class RegisterByObjectFactory { public RegisterByObjectFactory() { ObjectFactory.Initialize(x => { x.For<IClass1>().Use<Class1>(); x.For<IClass2>().Use<Class2>(); }); } }
ãã¹ãŠãDSLããã³ã©ã ãåŒã䜿çšããŠè¡ãããŸãã DSLèªäœã¯éåžžã«ç°¡æœã§ç解ãããããçµæã®ã³ãŒãã¯æå³ã®ããè¡šçŸã«ç°¡åã«æããããŸããŸãã ãã®å Žåã IClass1 ã€ã³ã¿ãŒãã§ã€ã¹ã« Class1ãäœ¿çš ãã å¿ èŠãããããšãç°¡åã« ç解 ã§ããŸã ã
ãªããžã§ã¯ãã®ååŸã¯ã次ã®æ¹æ³ã§è¡ãããšãã§ããŸãããçŽæçã§ããããŸãã
private static string ObjectFactoryExample() { new RegisterByObjectFactory(); var class1Inst = ObjectFactory.GetInstance<IClass1>(); var class2Inst = ObjectFactory.GetInstance<IClass2>(); return ObjectFactory.WhatDoIHave(); }
ãã®å Žåãã€ã³ã¿ãŒãã§ã€ã¹ã§GetInstanceãªããžã§ã¯ããååŸããã¡ã€ã³ã¡ãœããã ããã«ãå®æãããªããžã§ã¯ããååŸããããŸããŸãªæ¹æ³ãæ€èšããŸãã ã¡ãœããã¯ãã¡ãœããããååŸããæååãè¿ãããšãããããŸãããã®ååã¯ãçºè©±åWhatDoIHaveãæã¡ãŸãã ãã®æ¹æ³ã䜿çšãããšãã³ã³ããã®å éšã蚺æããäœããã©ã®ããã«ãã©ãã«ç»é²ãããŠãããã確èªã§ããŸãã
é·ãéããã¬ãŒã ã¯ãŒã¯ã®äœè ã¯åœŒã®åå«ã«é¢é£ããŠã³ã³ãããšããçšèªãåãå ¥ããããšãã§ããªãã£ãããã次ã®ã¡ãœããã¯é·ãéé ãããŠããŸãããããã®åŸã®å®è£ ã§ã®ã¿ãéçã¯ã©ã¹ã®èåŸã§å éšã§å®è£ ãããããã«ãèªç¶ãªç»é²ã³ãŒã¹ãéãããŸããã ã ãã
public class RegisterByContainer { public IContainer Container; public RegisterByContainer() { Container = new Container(x => { x.For<IClass1>().Use<Class1>(); x.For<IClass2>().Use<Class2>(); }); } }
äžèŠããã¹ãŠãåãã§ãã©ã ããåãã§ãããä»åºŠã¯ã¯ã©ã¹ãäœæãããããå€éšã«æž¡ããããã«ãã£ãŠã³ã³ããã«ã¢ã¯ã»ã¹ããŸãã ã€ãŸã ç¹°ãè¿ããŸãããObjectFactoryã¯Containerã¯ã©ã¹ã®éçã©ãããŒã¯ã©ã¹ã«ãããŸããã
ãªããžã§ã¯ãã®ååŸãåãã·ããªãªã«åŸããŸãã
private static string ContainerExample() { var container = new RegisterByContainer().Container; var class1Inst = container.GetInstance<IClass1>(); var class2Inst = container.GetInstance<IClass2>(); return container.WhatDoIHave(); }
è¡ã®æ¬¡ã®ãªããžã§ã¯ãã¯Registryã§ãã å®éã以åã¯ãã¹ãŠéæ¥çã«åŒã³åºããŠããŸããã å€æŽã®ããã«ãç¹å®ã®ã¯ã©ã¹ãç»é²ããŸãã
public class RegisterByRegister { public IContainer Container; public RegisterByRegister() { var registry = new Registry(); registry.ForConcreteType<Class1>(); registry.ForConcreteType<Class2>(); Container = new Container(x => x.AddRegistry(registry)); } }
ãã®å Žåã ForConcreteTypeã¡ãœããã䜿çšãããŸããããã¯ã®å矩èªã§ãã < T>ïŒïŒã®å Žåã < T>ïŒïŒã 䜿çšããŸãã ãŸããRegistryã¯ã©ã¹ããµãã³ã³ãããšããŠäœ¿çšããã¢ã»ã³ãã«ããŠããã1ã€ã®ã³ã³ããå ã®ã¢ã»ã³ããªã«è»¢éã§ããããšãããããŸãã ãã®å Žåãäœææã®ã¬ãžã¹ããªã®è¿œå ã瀺ãããŠããŸãããäœãæžãããšã劚ãããã®ã¯ãããŸããã
Container = new Container(); Container.Configure(x => x.AddRegistry(registry));
ãå ·äœçãªãã¯ã©ã¹ãèªãããšã¯ãéåžžãšå€ãããŸããã
private static string ConcreteClassExample() { var container = new RegisterByRegister().Container; var class1Inst = container.GetInstance<Class1>(); var class2Inst = container.GetInstance<Class2>(); return container.WhatDoIHave(); }
ãããã£ãŒã«
StructureMapã§ã¯ãååä»ããããã¡ã€ã«ã䜿çšããŠã¯ã©ã¹ãããã³ã°ãã°ã«ãŒãåã§ããŸãã ã€ãŸã ãããã³ã°ã¯ã©ã¹ããã°ããåãæ¿ããããšãã§ããŸãã
public class RegisteringProfiles { public IContainer Container; public RegisteringProfiles() { var registry = new Registry(); registry.Profile("p1", x => x.For<IClass>().Use<Class1>()); registry.Profile("p2", x => x.For<IClass>().Use<Class2>()); Container = new Container(x => x.AddRegistry(registry)); } }
ããã§ã¯ãã¯ã©ã¹Class1ãšClass2ãå ±éã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ãŠç»é²ãããŠããŸãããç°ãªããããã¡ã€ã«ã«ããããšã«æ³šæãã䟡å€ããããŸãã å¿ èŠãªã¯ã©ã¹ãååŸããã«ã¯ããããã¡ã€ã«ã®ååãååŸããSetDefaultProfileã¡ãœããã䜿çšããŠãã³ã³ããå ã®ãããã¡ã€ã«ãåãæ¿ããå¿ èŠããããŸãã
private static string ProfilesExample() { var container = new RegisteringProfiles().Container; container.SetDefaultsToProfile("p1"); var class1Inst = container.GetInstance<IClass>(); container.SetDefaultsToProfile("p2"); var class2Inst = container.GetInstance<IClass>(); return container.WhatDoIHave(); }
ãããã¡ã€ã«åã«ã¯æååå€æ°ã®ã¿ã䜿çšã§ããŸãããããã¯ãã¯ã倧ããªåé¡ã§ã¯ãããŸããã ã€ãŸããå®éã«ã¯ãäŸã®ããã«ç·ãéããŠãããã¡ã€ã«åãæžãã¹ãã§ã¯ãããŸããã ã«ã«ãã«æ害ã§ã
ã¢ã¯ãã£ããªãããã¡ã€ã«ãèšå®ããåŸãéåžžã©ããã³ã³ãããæäœã§ããŸãã ãã®çµæãåãè¡ãå®è¡ãããšã container.GetInstance <IClass>ïŒïŒ; ç°ãªãã¯ã©ã¹ãååŸããŸãã
ãã©ã°ã€ã³
å ±éã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠç¹å®ã®ã¯ã©ã¹ãååŸããåé¡ã解決ããå¥ã®æ¹æ³ããããŸããããã¯ååä»ããã©ã°ã€ã³ã§ãã
çšèªã«ã€ããŠå°ãã IntelliSenseãšããã®å°ãã§ã¯ããã©ã°ã€ã³ãPluginTypeããã³PluggedTypeãšããçšèªãèŠã€ããããšãã§ããŸããäžè¬çã«ãããã¯ååŸãããã¿ã€ããæå³ããŸã ã ã€ãŸã åè¿°ã®ãã¹ãŠã®äŸã§ãIClassã¯PluginTypeãšåŒã°ããClass1ãŸãã¯Class2ã¯PluggedTypeãšåŒã°ããŸãã
public class RegisterAsPlugin { public IContainer Container; public RegisterAsPlugin() { Container = new Container(x => { x.For<IClass>().Use<Class1>().Named("Class1"); x.For<IClass>().Use<Class2>().Named("Class2"); }); } }
äŸãšããŠãå ±éã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ã¯ã©ã¹ãç»é²ããããšãããããŸãããåæã«ç¹å®ã®ååãä»ããŸãã Namedã¡ãœããã䜿çšããŠãç¹å®ã®ã¿ã€ããç°¡åã«ç §äŒã§ããããã«ãªããŸããã
private static string PluginExample() { var container = new RegisterAsPlugin().Container; var class1Inst = container.GetInstance<IClass>("Class1"); var class2Inst = container.GetInstance<IClass>("Class2"); var instanceDef = container.GetInstance<IClass>(); return container.WhatDoIHave(); }
ãã®äŸã¯ãã³ã³ãããŒã«ã¢ã¯ã»ã¹ããŠãå ±éã€ã³ã¿ãŒãã§ãŒã¹ã§ç¹å®ã®ã¿ã€ããååŸããæ¹æ³ã瀺ããŠããŸãã ãã ããããã§åæã«è³ªåãæèµ·ããŸãããã©ã°ã€ã³åãæå®ããã«å ±éã®ã€ã³ã¿ãŒãã§ã€ã¹ã§GetInstanceã¡ãœãããåŒã³åºãããšãããšã©ããªããŸããïŒ
ããã©ã«ãã®åäœã¯ãã誰ãæåŸãã€ãŸãããããšããèšãæ¹ã«åŸããŸã ã ãã®å Žåã Class2ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯instanceDefå€æ°ã«å ¥ããŸãã ãã ããããã©ã«ãã¯ã©ã¹ãæ瀺çã«å®çŸ©ã§ããŸãã ãããè¡ãã«ã¯ããã©ã°ã€ã³ã®ç»é²ã®ãããã«ç°ãªã圢åŒã䜿çšããŸãã
public class RegisterAsPluginWithDefault { public IContainer Container; public RegisterAsPluginWithDefault() { Container = new Container(x => x.For<IClass>() .AddInstances(i => { i.Type(typeof (Class1)).Named("Class1"); i.Type(typeof (Class2)).Named("Class2"); }) .Use(new Class1()) ); } }
ãŸãããã®äŸã¯ããèªäœã説æããŠãããšèšããŸãã èªãã å Žåãæåéããªãã©ã«ã«ãªããŸãïŒ IClass ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ ã Class1ãšããååã®class1 å®è£ ãè¿œå ãã Class2 ãšããååã® Class2 ã è¿œå ã ãŸã Class1ã 䜿çšããŸã ïŒãã®å Žåãéåžžã«ç¹å®ã®ã¯ã©ã¹ã§ãããåã®äŸã§ã >ïŒïŒïŒã
ãã®å Žåãããã©ã«ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã«äœ¿çšãããã¿ã€ããäŒããã®ã¯Useã¡ãœããã§ãã ããã§æ¬¡ã®ã³ãŒããå®è¡ãããš
var instanceDef = container.GetInstance<IClass>();
次ã«ãã¯ã©ã¹Class1ã®ã€ã³ã¹ã¿ã³ã¹ãååŸããŸãã
Useã¯æ¢ã«ããã©ã«ãã®ã¿ã€ããå ¬éããŠããŸãã
ã¹ãã£ã³
è«ççãªç¶ç¶ã¯ãã³ã³ããå ã®åã®æ€çŽ¢ãšèªåç»é²ã§ãã å ±éã®ã€ã³ã¿ãŒãã§ãŒã¹ãã2ã€ã®ã¯ã©ã¹ãç¶æ¿ããã®ã§ã¯ãªãã50ãæ³åããŠãã ããïŒ ããããã¹ãŠã®ç»é²ãšäŸåé¢ä¿ãèªåã®æã§æºããã®ã¯éåžžã«æ²ããéå±ã§ãã ãã®ãããªå ŽåãStructureMapã«ã¯ãé¢å¿ã®ããã¢ã»ã³ããªãŸãã¯ãã©ã«ããŒãå®è¡ããŠé©åãªãªããžã§ã¯ããç»é²ããScanã¡ãœããããããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã«ãã©ã°ã€ã³ã®æ§é ãå®è£ ããäœããã®æ¹æ³ã§MEFãšç«¶åããããMEFãšçœ®ãæããããšãå¯èœã§ãã
Scanã¡ãœãããã¿ã€ããèŠã€ããŠç»é²ããã«ã¯ãããã€ãã®æ¡ä»¶ãæºããããŠããå¿ èŠããããŸãã
- ã¿ã€ãã¯æ瀺çã§ããå¿ èŠãããããžã§ããªãã¯ã¿ã€ãã¯èªåçã«ç»é²ãããŸããã
- ãã®åã«ã¯ãããªãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãå¿ èŠã§ãã
- ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ããªããã£ãåã®åŒæ°ãæã€ããšã¯ã§ããŸããã
- è€æ°ã®ç»é²ã¯èš±å¯ãããŠããŸããã
ã¹ãã£ã³æ¹æ³ãšåäœã¯ãªãŒããŒã©ã€ããããå ŽåããããŸãããçŸæç¹ã§ã¯ããã¯èæ ®ãããŸããã
ã¹ãã£ã³ããã¢ã»ã³ããªãããã€ãã®æ¹æ³ã§æå®ã§ããŸãã
- ã¢ã»ã³ããªåãæ瀺çã«ç¶Žãããæž¡ãã
- åŒã³åºãå ã¢ã»ã³ããªã«ã¢ã¯ã»ã¹ããŸãã
- ç¹å®ã®ã¿ã€ããå«ãã¢ã»ã³ããªãèŠã€ããŸãã
- ç¹å®ã®ãã¹ã§ãã«ããæ€çŽ¢ããŸãã
å®éšçãªã¢ã»ã³ããªãææããåŸãããŸããŸãªãã©ã¡ãŒã¿ãŒã§åãå«ãã/é€å€ããæ¹æ³ã䜿çšããŠãã€ã³ããŒãããã»ã¹ããã詳现ã«æ§æã§ããŸãã 詳现ã«ã€ããŠã¯ã ããã¥ã¡ã³ããåç §ããããšããå§ãããŸã ã ããã¯æ代é ãã§ãããå¯èœæ§ã®äžè¬çãªã¢ã€ãã¢ãæäŸããŸãã
ããã§ã¯ãããç°¡åãªäŸãèŠãŠã¿ãŸãããã
public class RegisterByScan { public IContainer Container; public RegisterByScan() { Container = new Container(x => x.Scan(s => { s.AddAllTypesOf(typeof (IClass)); s.AssembliesFromPath("."); s.WithDefaultConventions(); s.LookForRegistries(); })); } }
ãã®ã¯ã©ã¹ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒããIClassã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ãããã¹ãŠã®åãã€ã³ããŒãããããšãèšããŸããããã©ã«ãã®èŠåã«åŸã£ãŠãã ããã æåŸã®è¡ã¯ãæ€çŽ¢ãéå§ããã³ãã³ãã§ãã 以åã¯ãæ瀺çãªæ瀺ãªãã«ãã¹ãŠãæ©èœããŠããŸããã ãã ããLookForRegistriesã¡ãœãããæ確ã«å®çŸ©ããå¿ èŠããããŸãã
ã¡ãœãããæ©èœãããšãã³ã³ããã§æ€åºããã³ç»é²ãããå 容ã確èªã§ããŸãã
private static string RegisterByScanExample() { var container = new RegisterByScan().Container; var instances = container.GetAllInstances<IClass>(); return container.WhatDoIHave(); }
Get All Instancesã¡ãœãããåŒã³åºãããŠããããšã«æ³šæããŠãã ããã ç»é²ãããã¯ã©ã¹ããç¹å®ã®ã¯ã©ã¹ãååŸããã¡ãœãããåŒã³åºããšãStructureMapã¯ãããã©ã«ãã§ãè¿ãã¯ã©ã¹ãèªèããªãããããšã©ãŒãçºçããŸãã
æ£çŽãªãšããããã®ãããªå®è£ ã§ã¯ãã¹ãã£ã³ã³ãã³ãã®çµæã䜿çšããããšã¯ã§ããŸããã ãã¹ãŠãããŸããªããèŠã€ãã£ãã¯ã©ã¹ãååã§åç §ã§ããããã«ããã«ã¯ãã¹ãã£ã³ã³ãŒããå°ãæžãæããå¿ èŠããããŸãã
public class RegisterByScanWithNaming { public IContainer Container; public RegisterByScanWithNaming() { Container = new Container(x => x.Scan(s => { s.AddAllTypesOf(typeof (IClass)).NameBy(t => t.Name); s.AssembliesFromPath("."); s.WithDefaultConventions(); s.LookForRegistries(); })); } }
ãã¹ãŠã®ã¯ã©ã¹ãååã§ç»é²ããå¿ èŠããããšããæ確ãªã«ãŒã«ãAddAllTypesOfã¡ãœããã«è¿œå ãããŸããã ãã®å€æŽåŸãç¹å®ã®ã¿ã€ããæäœã§ããŸãã
var instance = container.GetInstance<IClass>("Class1");
å®è£
ã³ã³ããã®æäœäžã«ãããã©ã«ãã§è¿ãããã¿ã€ãããªãŒããŒã©ã€ãã§ããŸãã ããã¯äž»ã«ãã¹ãã§äœ¿çšãããŸãã ä»äºã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ïŒ
private static string InjectExample() { var container = new RegisterAsPluginWithDefault().Container; var instance1 = container.GetInstance<IClass>("Class1"); var instance2 = container.GetInstance<IClass>("Class2"); var class1Inst = container.GetInstance<IClass>(); container.Inject(typeof (IClass), new Class2()); var class2Inst = container.GetInstance<IClass>(); return container.WhatDoIHave(); }
以åã«ãããã©ã«ãã®Class1ã¯ã©ã¹ãè¿ãRegisterAsPluginWithDefaultã¯ã©ã¹ã宣èšããŸããã Injectã¡ãœããã䜿çšãããšãæ»ãå€ã®åããªãŒããŒã©ã€ãã§ããŸãããã©ã°ã€ã³ã®åãšæ°ããã¯ã©ã¹ãæå®ããã ãã§ãã
ãããã®äŸã¯ãã¯ã©ã¹èªäœãåçŽãªå Žåã®ç»é²ã®äžè¬ååã«åºã¥ããŠããŸãã 次ã®ãããã¯ã§ã¯ããã©ã¡ãŒã¿ãŒãæã€ã³ã³ã¹ãã©ã¯ã¿ãŒãæã€ã¯ã©ã¹ãã©ã®ããã«æ±ãããæ€èšããŸãã
ç¶ç¶ããã