ç®æ¬¡
- ã¯ããã«
- Prismã¢ããªã±ãŒã·ã§ã³ã®åæå
- ã³ã³ããŒãã³ãéã®äŸåé¢ä¿ã®ç®¡ç
- ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³éçº
- MVVMãã¿ãŒã³ã®å®è£
- é«åºŠãªMVVMã·ããªãª
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®äœæ
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ã¬ã€ãã©ã€ã³
- ããã²ãŒã·ã§ã³
- ãã¥ãŒããŒã¹ã®ããã²ãŒã·ã§ã³
- ççµåã³ã³ããŒãã³ãéã®çžäºäœçš
ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã¯ãåäžã®ãŠãããã«çµ±åã§ããå€ãã®æ©èœãããã¯ïŒã¢ãžã¥ãŒã«ïŒã«åå²ã§ããã¢ããªã±ãŒã·ã§ã³ã§ãã ã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ©èœå
šäœã®äžéšãã«ãã»ã«åããéåžžãçžäºæ¥ç¶ãããæ©èœéšåã®éåã§ãã ããã«ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãããžãã¹ããžãã¯ãªã©ã®ã¢ããªã±ãŒã·ã§ã³æ©èœãªã©ã®é¢é£ã³ã³ããŒãã³ãã®ã»ããããŸãã¯ãã®ã³ã°çšã®ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ãµãŒãã¹ããŠãŒã¶ãŒèªèšŒããã³æ¿èªãªã©ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ãã©ã¹ãã©ã¯ãã£ã®äžéšãå«ãŸããå ŽåããããŸãã ã¢ãžã¥ãŒã«ã¯äºãã«ç¬ç«ããŠããŸãããççµåã®æ¹æ³ã§çžäºã«å¯Ÿè©±ã§ããŸãã ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®éçºããã¹ããå±éãããã³æ¡åŒµãä¿é²ã§ããŸãã
ããšãã°ãããŒãœãã«ãã³ãã³ã°ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããã ãŠãŒã¶ãŒã¯ãã¢ã«ãŠã³ãéã§ã®ééãè«æ±æžã®æ¯æããåäžã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ïŒUIïŒã䜿çšããå人ããŒã¿ã®æŽæ°ãªã©ãå€ãã®æ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã ãã ãããããã®åæ©èœã¯åå¥ã®ã¢ãžã¥ãŒã«ã«ã«ãã»ã«åãããŠããŸãã ãããã®ã¢ãžã¥ãŒã«ã¯çžäºã«éä¿¡ããããŒã¿ããŒã¹ãµãŒããŒãWebãµãŒãã¹ãªã©ã®ããã¯ãšã³ãã·ã¹ãã ãšãéä¿¡ããŸãã ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã¯ãããŸããŸãªã¢ãžã¥ãŒã«ã®ããããã«ããŸããŸãªã³ã³ããŒãã³ããçµ±åãããŠãŒã¶ãŒãšã®å¯Ÿè©±ãåŠçããŸãã ãŠãŒã¶ãŒã«ã¯ãå¯äžã®å®å
šãªã¢ããªã±ãŒã·ã§ã³ã®ããã«èŠããçµ±åãã¥ãŒã衚瀺ãããŸãã
次ã®å³ã¯ãã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã®èšèšã瀺ããŠããŸãã

ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå©ç¹
ãããããã¢ã»ã³ããªãã€ã³ã¿ãŒãã§ã€ã¹ãã¯ã©ã¹ãããã³åªãããªããžã§ã¯ãæåéçºååã䜿çšããŠãé©åã«èšèšãããã¢ããªã±ãŒã·ã§ã³ããã§ã«äœæããŠããã§ãããã ãã®å Žåãæ·±å»ãªå¯Ÿçãè¬ããªããšãã¢ããªã±ãŒã·ã§ã³ã®èšèšã¯ãã¢ããªã·ãã¯ãã®ãŸãŸã«ãªããŸãïŒãã¹ãŠã®æ©èœãã¢ããªã±ãŒã·ã§ã³å
ã§åŒ·åã«æ¥ç¶ãããæ¹æ³ã§å®è£
ãããŸãïŒã
äžæ¹ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ã¢ãžã¥ã©ãŒã¢ãããŒãã¯ã倧èŠæš¡ãªæ©èœé åãåé¢ããããããç¬ç«ããŠéçºãŸãã¯ãã¹ãããã®ã«åœ¹ç«ã¡ãŸãã ããã«ãããéçºãšãã¹ããç°¡åã«ãªããã¢ããªã±ãŒã·ã§ã³ãå°æ¥ããæè»ã§ç°¡åã«æ¡åŒµã§ããããã«ãªããŸãã ã¢ãžã¥ãŒã«æ¹åŒã®å©ç¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã管çããããéšåã«åå²ããããšã«ãããã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ãããæè»ã§ä¿å®ããããããããšãã§ããããšã§ãã åéšåã¯ç¹å®ã®æ©èœãã«ãã»ã«åããæ確ã§ã¯ãããççµåã®ãã£ãã«ãä»ããŠçµ±åããŸãã
ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³éçºã®ããã®PrismãµããŒã
Prismã¯ãå®è¡æã«ã¢ãžã¥ãŒã«åŒã¢ããªã±ãŒã·ã§ã³ãéçºããã¢ãžã¥ãŒã«ã管çããã®ã«åœ¹ç«ã¡ãŸãã Prismæ©èœã䜿çšãããšãã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ç¬èªã®ãã©ãããã©ãŒã ãå®è£
ããã³ãã¹ãããå¿
èŠããªããããæéãç¯çŽã§ããŸãã Prismã¯ãã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ãéçºããããã«æ¬¡ã®æ©èœããµããŒãããŠããŸãã
- ååä»ãã¢ãžã¥ãŒã«ãç»é²ãããããã®å Žæã決å®ãããããããã®ã¢ãžã¥ãŒã«ã®ã«ã¿ãã°ã 次ã®æ¹æ³ã§ã¢ãžã¥ãŒã«ã«ã¿ãã°ãäœæã§ããŸãã
- ã³ãŒããŸãã¯XAMLã§ã¢ãžã¥ãŒã«ãå®çŸ©ããŸãã
- WPFã®å ŽåïŒãã®æ¹æ³ã§ã¯ãã¢ãžã¥ãŒã«ããã£ã¬ã¯ããªã«é
眮ããããšã«ãããäžå€®ãã£ã¬ã¯ããªã«æ瀺çã«å®çŸ©ããã«ãã¹ãŠã®ã¢ãžã¥ãŒã«ãããŒãã§ããŸãã
ã泚æ
ãã®ã¢ãããŒãã䜿çšãããšãã¢ãžã¥ãŒã«ãå«ãã¢ã»ã³ããªã¯ãããžã§ã¯ãã®ã¢ã»ã³ãã«æã«èªåçã«ã³ã³ãã€ã«ãããããããžã§ã¯ãã®å®è¡å¯èœãã¡ã€ã«ããã®ãªã³ã¯ããªããããåºåãã£ã¬ã¯ããªã«ã³ããŒãããªãå ŽåããããŸãã
- WPFã®å ŽåïŒæ§æãã¡ã€ã«ã§ã¢ãžã¥ãŒã«ãå®çŸ©ããŸãã
- åæåã¢ãŒããšäŸåæ§æ³šå
¥ã®æ±ºå®ã«äœ¿çšãããã¢ãžã¥ãŒã«ã®å±æ§ã宣èšçã«èšå®ããŸãã
- ã¢ãžã¥ãŒã«éã®åŒ±ãæ¥ç¶ãç¶æããããã®äŸåæ§æ³šå
¥ã³ã³ãããŒãšã®çµ±åã
- ã¢ãžã¥ãŒã«ãããŒãããã«ã¯ïŒ
- ã¢ãžã¥ãŒã«ãæ£ããé åºã§ããŒããããã¢ãžã¥ãŒã«ãäžåºŠã ãããŒãããã³åæåãããããã«ããããã®ãè€è£œããã³ã«ãŒãæ€åºãå«ãäŸåé¢ä¿ç®¡çã
- ã¢ãžã¥ãŒã«ã®ããã¯ã°ã©ãŠã³ãããŒããšãªã³ããã³ãããŒãã«ãããã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãæå°éã«æããŸãã æ®ãã®ã¢ãžã¥ãŒã«ã¯ãããã¯ã°ã©ãŠã³ãã§ããŸãã¯å¿
èŠã«å¿ããŠããŒãããã³åæåã§ããŸãã
åºæ¬çãªæŠå¿µ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã
IModule
ãã¢ãžã¥ãŒã«ã®ããŒãããã»ã¹ãã¢ãžã¥ãŒã«ã«ã¿ãã°ãã¢ãžã¥ãŒã«éã®éä¿¡ã®ç¶æãããã³äŸåæ§æ³šå
¥ã³ã³ãããŒãªã©ãPrismã®ã¢ãžã¥ãŒã«æ¹åŒã«é¢é£ããåºæ¬æŠå¿µã説æããŸãã
IModule ïŒã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã®ãã«ãã£ã³ã°ãããã¯
ã¢ãžã¥ãŒã«ã¯ã1ã€ã®å Žæã«éããããæ©èœã³ã³ããŒãã³ããšãªãœãŒã¹ã®è«çã»ããã§ãã ã¢ãžã¥ãŒã«ã¯ãåå¥ã«éçºããã¹ãããããã€ãããã³ã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããŸãã ããã±ãŒãžã«ã¯ã1ã€ä»¥äžã®ã¢ã»ã³ããªãå«ããããšãã§ããŸãããããã®ã¢ã»ã³ããªã¯ãåå¥ã«é
眮ããããšããåäžã®XAPãã¡ã€ã«ã«ã¢ã»ã³ãã«ããããšãã§ããŸãã åã¢ãžã¥ãŒã«ã«ã¯ãã¢ãžã¥ãŒã«æ©èœãåæåããŠã¢ããªã±ãŒã·ã§ã³ã«çµ±åããäžå¿çãªã¯ã©ã¹ããããŸãã ãã®ã¯ã©ã¹ã¯ã
IModule
å®è£
ã
IModule
ã ããã±ãŒãžãã¢ãžã¥ãŒã«ãšããŠèå¥ããã«ã¯ã
IModule
ãå®è£
ããã¯ã©ã¹ãããã°ååã§ãã
IModule
ã¯ã
Initialize
ã¡ãœããã1ã€ãããŸãããã®ã¡ãœããå
ã§ãã¢ãžã¥ãŒã«æ©èœãåæåããŠã¢ããªã±ãŒã·ã§ã³ã«çµ±åããããã«å¿
èŠãªããžãã¯ãå®è£
ã§ããŸãã ã¢ãžã¥ãŒã«ã®ç®çã«å¿ããŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®é åã«è¡šçŸãç»é²ããããã¢ããªã±ãŒã·ã§ã³ã§è¿œå ã®ãµãŒãã¹ãå©çšå¯èœã«ããããæ©èœãæ¡åŒµãããã§ããŸãã 次ã®ã³ãŒãã¯ãã¢ãžã¥ãŒã«ã®æå°å®è£
ã瀺ããŠããŸãã
public class MyModule : IModule { public void Initialize() {
ã泚æ
IModule
ã«ãã£ãŠæäŸãããåæåã¡ã«ããºã ã䜿çšãã代ããã«ã Stock Trader RIã¯ããã¥ãŒããµãŒãã¹ãããã³ã¿ã€ããç»é²ããããã®å®£èšåã®å±æ§ããŒã¹ã®ã¢ãããŒãã䜿çšããŸãã
ã¢ãžã¥ãŒã«ã®å¯¿åœ
Prismã®ã¢ãžã¥ãŒã«ããŒãããã»ã¹ã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- ã¢ãžã¥ãŒã«ã®ç»é²/çºèŠã ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®å®è¡æã«ããŒããããã¢ãžã¥ãŒã«ã¯ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã§å®çŸ©ãããŸãã ãã£ã¬ã¯ããªã«ã¯ãããŒããããã¢ãžã¥ãŒã«ããã®å Žæãããã³ããŒããããé åºã«é¢ããæ
å ±ãå«ãŸããŠããŸãã
- ã¢ãžã¥ãŒã«ãããŒãããŠããŸãã ã¢ãžã¥ãŒã«ãå«ãã¢ã»ã³ããªãã¡ã¢ãªã«ããŒããããŸãã ãã®ãã§ãŒãºã§ã¯ããããã¯ãŒã¯ããããŸãã¯å¥ã®ãªã¢ãŒããã±ãŒã·ã§ã³ãŸãã¯ããŒã«ã«ãã£ã¬ã¯ããªããã¢ãžã¥ãŒã«ãããŠã³ããŒãããå¿
èŠããããŸãã
- ã¢ãžã¥ãŒã«ã®åæåã ã¢ãžã¥ãŒã«ã¯ã©ã¹ãäœæãã
IModule
ä»ããŠInitialize
ã¡ãœãããIModule
ã
次ã®å³ã¯ãã¢ãžã¥ãŒã«ã®ããŒãããã»ã¹ã瀺ããŠããŸãã

ã¢ãžã¥ãŒã«ã«ã¿ãã°
ModuleCatalog
ã¯ãã¢ããªã±ãŒã·ã§ã³ã䜿çšã§ããã¢ãžã¥ãŒã«ã«é¢ããæ
å ±ãå«ãŸããŠããŸãã ãã£ã¬ã¯ããªã¯ãæ¬è³ªçã«
ModuleInfo
ã¯ã©ã¹ã®ã³ã¬ã¯ã·ã§ã³ã§ãã åã¢ãžã¥ãŒã«ã¯ãã¢ãžã¥ãŒã«ã®ååãã¿ã€ããããã³å Žæãæ ŒçŽãã
ModuleInfo
ã¯ã©ã¹ã«ãã£ãŠèšè¿°ãããŸãã
ModuleCatalog
ã«
ModuleCatalog
ã€ã³ã¹ã¿ã³ã¹ã
ModuleCatalog
ããããã®ããã€ãã®å
žåçãªã¢ãããŒãããããŸãã
- ã³ãŒãå
ã®ã¢ãžã¥ãŒã«ã®ç»é²ã
- XAMLã§ã¢ãžã¥ãŒã«ãç»é²ããŸãã
- æ§æãã¡ã€ã«ãžã®ã¢ãžã¥ãŒã«ã®ç»é²ïŒWPFã®ã¿ïŒã
- ãã£ã¹ã¯äžã®ããŒã«ã«ãã£ã¬ã¯ããªå
ã®ã¢ãžã¥ãŒã«ã®æ€åºïŒWPFã®ã¿ïŒã
䜿çšããç»é²ããã³æ€åºã¡ã«ããºã ã®éžæã¯ãã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªãã®ã«ãã£ãŠç°ãªããŸãã æ§æãã¡ã€ã«ãŸãã¯XAMLãã¡ã€ã«ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ã¢ãžã¥ãŒã«åç
§ãä¿åã§ããŸããã ããŒã«ã«ãã£ã¬ã¯ããªã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã§ã¢ãžã¥ãŒã«ãæ€åºã§ããŸããããã¡ã€ã«ã§å®çŸ©ããå¿
èŠã¯ãããŸããã
ã¢ãžã¥ãŒã«ã®ããŒãæéã®ç®¡ç
Prismã¢ããªã±ãŒã·ã§ã³ã¯ãå¯èœãªéãæ©ãã¢ãžã¥ãŒã«ãåæåããããšãã§ããŸããããã¯ãå©çšå¯èœãªå ŽåããŸãã¯ã¢ããªã±ãŒã·ã§ã³ãå¿
èŠãšããå Žåããªã³ããã³ããšããŠç¥ãããŠããŸãã Silverlightã¢ããªã±ãŒã·ã§ã³ã®å Žåãã¢ãžã¥ãŒã«ã¯ã¢ããªã±ãŒã·ã§ã³ãšå
±ã«ããŒãããããšããã¢ããªã±ãŒã·ã§ã³ã®èµ·ååŸã«ããã¯ã°ã©ãŠã³ãã§ããŒãããããšãã§ããŸãã 次ã®ã¢ãžã¥ãŒã«ã®ããŒãæé ãèæ
®ããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã«å¿
èŠãªã¢ãžã¥ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãšãšãã«ããŒããããèµ·åæã«åæåãããå¿
èŠããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®éåžžã®äœ¿çšäžã«ã»ãšãã©åžžã«äœ¿çšãããé¢æ°ãå«ãã¢ãžã¥ãŒã«ã¯ãããã¯ã°ã©ãŠã³ãã§ããŒãããã䜿çšå¯èœã«ãªã£ããšãã«åæåã§ããŸãã
- ãã£ãã«äœ¿çšãããªãïŒãŸãã¯ä»ã®ã¢ãžã¥ãŒã«ãäŸåããå¯èœæ§ã®ããã¢ãžã¥ãŒã«ããµããŒãããïŒé¢æ°ãå«ãã¢ãžã¥ãŒã«ã¯ãããã¯ã°ã©ãŠã³ãã§ããŒããããªã³ããã³ãã§åæåã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®åå²æ¹æ³ãäžè¬çãªãŠãŒã¹ã±ãŒã¹ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åé床ãããŠã³ããŒãã®æ°ãšãµã€ãºãèæ
®ããŠãã¢ãžã¥ãŒã«ã®ããŒããšåæåãæ§æããæ¹æ³ã決å®ããŸãã
ã¢ãžã¥ãŒã«ãšã¢ããªã±ãŒã·ã§ã³ã®çµ±å
Prismã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãã«å¿
èŠãª
UnityBootstrapper
ããã³
MefBootstrapper
ã¯ã©ã¹ãæäŸããŸãã ãããã®ã¯ã©ã¹ã䜿çšããŠãã¢ãžã¥ãŒã«ã®æ€åºãšããŒãã«å¿
èŠãªã¢ãžã¥ãŒã«ãããŒãžã£ãŒãäœæããã³æ§æã§ããŸãã ã¢ãžã¥ãŒã«ã«ã¿ãã°ã®æ§ææ¹æ³ããªãŒããŒã©ã€ãããŠãXAMLãã¡ã€ã«ãæ§æãã¡ã€ã«ã§å®çŸ©ãããã¢ãžã¥ãŒã«ãç»é²ãããããã£ã¬ã¯ããªã®å Žæãæå®ãããã§ããŸãã
ã¢ãžã¥ãŒã«ã®
Initialize
ã¡ãœããã䜿çšããŠãã¢ãžã¥ãŒã«ãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãšçµ±åããŸãã ãããè¡ãæ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ§é ãšã¢ãžã¥ãŒã«ã®å
容ã«ãã£ãŠç°ãªããŸãã 以äžã¯ãã¢ãžã¥ãŒã«ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããããã«å¿
èŠãªäžè¬çãªæé ã§ãã
- ã¢ãžã¥ãŒã«ã«å«ãŸãããã¥ãŒãã¢ããªã±ãŒã·ã§ã³ã®ããã²ãŒã·ã§ã³æ§é ã«è¿œå ããŸãã ããã¯ãæ€åºãŸãã¯ãã¥ãŒã®æ¿å
¥ã䜿çšããŠè€åã¢ããªã±ãŒã·ã§ã³ã®UIãäœæãããšãã®äžè¬çãªæé ã§ãã
- ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã¬ãã«ã®ã€ãã³ãããµãã¹ã¯ã©ã€ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³äŸåæ§æ³šå
¥ã³ã³ããã«å
±æãµãŒãã¹ãç»é²ããŸãã
ã¢ãžã¥ãŒã«éã®éä¿¡
ã¢ãžã¥ãŒã«ãççµåãããã¹ãã§ããããšãèæ
®ããŠãããããã¯äºãã«ããŒã¿ãšã¡ãã»ãŒãžã亀æããåŸåããããŸãã ççµåã·ã¹ãã ã«ã¯ããã€ãã®éä¿¡ãã¿ãŒã³ããããããããã«é·æãšçæããããŸãã ååãšããŠããããã®ãã¿ãŒã³ã®çµã¿åãããæçµçã«äœ¿çšãããŸãã ãããã®ãã¿ãŒã³ã®äžéšã次ã«ç€ºããŸãã
- 倧ãŸãã«é¢é£ããã€ãã³ãã ã¢ãžã¥ãŒã«ã¯ãç¹å®ã®ã€ãã³ããçºçããããšããããŒããã£ã¹ãã§ããŸãã ä»ã®ã¢ãžã¥ãŒã«ã¯ããã®ãããªã€ãã³ããåä¿¡ããããã«ãµãã¹ã¯ã©ã€ãã§ããŸãã ãã®ããã«ããŠããã®ã€ãã³ããçºçãããšéç¥ãããŸãã ççµåã€ãã³ãã¯ãã¢ãžã¥ãŒã«éã®éä¿¡ã確ç«ããããã®ããªãç°¡åãªæ¹æ³ã§ãã ãã®ç¹ã§ãç°¡åã«å®è£
ã§ããŸãã ãã ããã€ãã³ãã«äŸåãããããããžã§ã¯ãã¯ãç¹ã«å€ãã®ã€ãã³ããããå ŽåããŸãã¯åäžã®ã¿ã¹ã¯ãéæããããã«äžç·ã«ç·šæããå¿
èŠãããå ŽåããµããŒããé£ãããªãå¯èœæ§ããããŸãã ãã®å Žåãå
±æãµãŒãã¹ã®äœ¿çšã¯ããåççãããããŸããã
- å
±æãµãŒãã¹ å
±æãµãŒãã¹ã¯ãå
±éã®ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠã¢ã¯ã»ã¹ã§ããã¯ã©ã¹ã§ãããéåžžã¯ã³ã³ãããŒãä»ããŠè§£æ±ºãããŸãã éåžžãå
±æãµãŒãã¹ã¯å
±æã¢ã»ã³ããªã«ååšããèªèšŒããã°ãæ§æãªã©ã®ã·ã¹ãã å
šäœã®ãµãŒãã¹ãæäŸããŸãã ãã®ãããªãµãŒãã¹ã¯ãå€ãã®å Žåã·ã³ã°ã«ããŒã³ã§ãã
- å
±æãªãœãŒã¹ã ã¢ãžã¥ãŒã«ãäºãã«çŽæ¥éä¿¡ããããªãå Žåã¯ãããŒã¿ããŒã¹ãå€æ°ã®WebãµãŒãã¹ãªã©ã®å
±æãªãœãŒã¹ãä»ããŠã¢ãžã¥ãŒã«ãéæ¥çã«éä¿¡ãããããšãã§ããŸãã
äŸåæ§æ³šå
¥ãšã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³
Unity Application BlockïŒUnityïŒãManaged Extensibility FrameworkïŒMEFïŒãªã©ã®ã³ã³ãããŒã䜿çšãããšãå¶åŸ¡ã®å転ïŒIoCïŒããã³äŸåé¢ä¿ã®æ³šå
¥ãç°¡åã«äœ¿çšã§ããŸãããããã¯ãççµåã®æ¹æ³ã§ã³ã³ããŒãã³ããæ¥ç¶ããã®ã«åœ¹ç«ã€åŒ·åãªéçºãã¿ãŒã³ã§ãã ããã«ãããã³ã³ããŒãã³ãã¯ããããã®ãªã³ã¯ãããŒãã³ãŒãã£ã³ã°ããå¿
èŠãªããäŸåããä»ã®ã³ã³ããŒãã³ããžã®ãªã³ã¯ãååŸã§ãããããã³ãŒãã®åå©çšãšæè»æ§ã®åäžãåŸãããŸãã äŸåæ§æ³šå
¥ã¯ãççµåã®ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã«éåžžã«åœ¹ç«ã¡ãŸãã Prismã¯ãã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ããæ§æããããã«äœ¿çšãããDIã³ã³ããããç¬ç«ããããã«èšèšãããŸããã ã³ã³ããã®éžæã¯ããªãã®ããžãã¹ã§ãããããã¯åºæ¬çãªéçšç¹æ§ãšå¥œã¿ã«å€§ããäŸåããŸãã Microsoftãæ€èšããäž»ãªäŸåé¢ä¿æ³šå
¥ãã©ãããã©ãŒã ã¯ãUnityãšMEFã®2ã€ã§ãã
ãã¿ãŒã³ãšãã©ã¯ãã£ã¹Unity Application Blockã¯ããã«æ©èœã®äŸåæ§æ³šå
¥ã³ã³ãããŒãå°å
¥ããŸãã ããããã£ããŒã¹ã®ã€ã³ãžã§ã¯ã·ã§ã³ãã³ã³ã¹ãã©ã¯ã¿ãŒããŒã¹ã®ã€ã³ãžã§ã¯ã·ã§ã³ãããã³ããªã·ãŒã€ã³ãžã§ã¯ã·ã§ã³ããµããŒãããŠãããããã³ã³ããŒãã³ãéã§åäœãšããªã·ãŒãééçã«å°å
¥ã§ããŸãã ãŸããäŸåæ§æ³šå
¥ã³ã³ããã«å
žåçãªä»ã®å€ãã®æ©èœããµããŒãããŠããŸãã
MEFïŒçŸåšã¯.NET Framework 4ããã³Silverlight 4ã®äžéšïŒã䜿çšãããšãäŸåæ§æ³šå
¥ããŒã¹ã®æ§æããµããŒãããããšã§æ¡åŒµå¯èœãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããã¢ãžã¥ãŒã«åŒã¢ããªã±ãŒã·ã§ã³éçºããµããŒãããä»ã®æ©èœãæäŸããŸãã ããã«ãããã¢ããªã±ãŒã·ã§ã³ã¯å®è¡æã«ã³ã³ããŒãã³ããæ€åºããããããã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããŸãã MEFã¯ãæ¡åŒµãšæ§æã®å€§ããªæ©äŒãæäŸããŸãã ãããã«ã¯ãã¢ã»ã³ããªãšåã®æ€åºãäŸåé¢ä¿ã®è§£æ±ºãäŸåé¢ä¿ã®æ¿å
¥ãããã³ã¢ã»ã³ããªãšXAPãã¡ã€ã«ãèªã¿èŸŒãããã®ããã€ãã®æ©èœãå«ãŸããŸãã Prismã¯ã次ã®ãããªMEFé¢æ°ã®äœ¿çšããµããŒãããŠããŸãã
- ã¢ãžã¥ãŒã«ã¿ã€ããšXAPãã¡ã€ã«ã®å Žæãšã®é¢é£ä»ãã
- XAMLããã³WPFããã³Silverlightã®ã³ãŒãã§ã¢ãžã¥ãŒã«ãç»é²ããŸãã
- WPFã®æ§æãã¡ã€ã«ããã³ã¹ãã£ã³ããããã£ã¬ã¯ããªãä»ããã¢ãžã¥ãŒã«ã®ç»é²ã
- ã¢ãžã¥ãŒã«ã®ããŒãã¹ããŒã¿ã¹ã®è¿œè·¡ã
- ã¢ãžã¥ãŒã«ã®ã«ã¹ã¿ã 宣èšã¡ã¿ããŒã¿ã
éèŠãªæ±ºå®
æåã«æ±ºå®ããå¿
èŠãããã®ã¯ãã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ãéçºãããã©ããã§ãã åã®ã»ã¯ã·ã§ã³ã§èª¬æããããã«ãã¢ãžã¥ãŒã«åŒã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã«ã¯å€ãã®å©ç¹ããããŸããããããã®å©ç¹ãåŸãããã«è¿œå ã®æéãšåŽåãå¿
èŠã§ãã ããã§ãã¢ãžã¥ãŒã«åŒã¢ããªã±ãŒã·ã§ã³ãéçºããããšã«æ±ºããå Žåã¯ãããã«èæ
®ãã¹ãããšãããã€ããããŸãã
- 䜿çšãããã©ãããã©ãŒã ãç¹å®ããŸãã ç¬èªã®ã¢ãžã¥ã©ãŒãã©ãããã©ãŒã ãäœæããPrismãMEFããŸãã¯å¥ã®ãã©ãããã©ãŒã ã䜿çšã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ç·šææ¹æ³ã決å®ããŸãã ã©ã®ã¢ãžã¥ãŒã«ãåã¢ãžã¥ãŒã«ã®äžéšã§ããããªã©ãåã¢ãžã¥ãŒã«ã®å¢çãå®çŸ©ããããšã«ãããã¢ãžã¥ãŒã«ã¢ãŒããã¯ãã£ã«è¿ã¥ããŸãã éçºã容æã«ãããããã¢ããªã±ãŒã·ã§ã³ã®ãããã€æ¹æ³ãå¶åŸ¡ããããããŸãã¯ãã©ã¬ãã«ãŸãã¯æ¡åŒµå¯èœãªã¢ãŒããã¯ãã£ããµããŒãããããã«ãã¢ãžã¥ãŒã«æ¹åŒã®ååã䜿çšããããšã決å®ã§ããŸãã
- ã¢ãžã¥ãŒã«ã®åå²æ¹æ³ã決å®ããŸãã ã¢ãžã¥ãŒã«ã¯ãèŠä»¶ã«åºã¥ããŠãããšãã°æ©èœåéãæäŸãããã¢ãžã¥ãŒã«ãéçºããŒã ãå±éèŠä»¶ãªã©ã«åºã¥ããŠåå²ã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ããã¹ãŠã®ã¢ãžã¥ãŒã«ã«æäŸããåºæ¬ãµãŒãã¹ãå®çŸ©ããŸãã ããšãã°ããšã©ãŒå ±åãµãŒãã¹ãèªèšŒããã³èš±å¯ãµãŒãã¹ãªã©ã§ãã
- Prismã䜿çšããå Žåã¯ãã¢ãžã¥ãŒã«ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã«ç»é²ããæ¹æ³ã決å®ããŸãã WPFã®å Žåãã³ãŒããXAMLãæ§æãã¡ã€ã«ã«ã¢ãžã¥ãŒã«ãç»é²ãããããã£ã¹ã¯äžã®ããŒã«ã«ãã£ã¬ã¯ããªã«ã¢ãžã¥ãŒã«æ€åºãæ§æã§ããŸãã Silverlightã®å Žåãã³ãŒããŸãã¯XAMLã§ã¢ãžã¥ãŒã«ãç»é²ã§ããŸãã
- ã¢ãžã¥ãŒã«éã§ããŒã¿ãšäŸåé¢ä¿ã転éããããã®æŠç¥ãå®çŸ©ããŸãã ã¢ãžã¥ãŒã«ã¯äºãã«éä¿¡ããå¿
èŠããããã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ãåŠçããå¿
èŠããããŸãã
- äŸåæ§æ³šå
¥ã³ã³ãããå®çŸ©ããŸãã éåžžãã¢ãžã¥ã©ãŒã·ã¹ãã ã§ã¯ãççµåãåçããŒããããã³ã¢ãžã¥ãŒã«äœæãæäŸããããã«ãäŸåé¢ä¿ã®æ³šå
¥ãå¶åŸ¡ã®å転ããŸãã¯ãµãŒãã¹ãã±ãŒã¿ãŒãå¿
èŠã§ãã Prismã§ã¯ãUnityãMEFããŸãã¯å¥ã®ã³ã³ãããéžæã§ããUnityãŸãã¯MEFã«åºã¥ããã¢ããªã±ãŒã·ã§ã³çšã®ã©ã€ãã©ãªãæäŸããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãæå°éã«ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãæå°éã«æããããã«ãã¢ãžã¥ãŒã«ããªã³ããã³ãã§ããŒãããããã¯ã°ã©ãŠã³ãã§ããŒãããããšãæ€èšããŠãã ããã
- å±éèŠä»¶ãå®çŸ©ããŸãã ã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«ãããã€ããããèããå¿
èŠããããŸãã ããã¯ãXAPãã¡ã€ã«ã§åéãããã¢ã»ã³ããªã®æ°ã«åœ±é¿ããå ŽåããããŸãã Prismãªã©ã®å
±æã©ã€ãã©ãªãåå²ããŠãSilverlightã«ãã£ãã·ã¥ãããã¢ã»ã³ããªã䜿çšããããšãã§ããŸãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ããããã®ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠè©³ãã説æããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãžã¥ãŒã«ãžã®åé¢
ã¢ãžã¥ãŒã«æ¹åŒã§ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãåå¥ã«éçºããã¹ããããã³å±éã§ããåå¥ã®ã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã«æ§é åããŸãã åã¢ãžã¥ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å
šæ©èœã®äžéšãã«ãã»ã«åããŸãã æåã«è¡ãå¿
èŠã®ããèšèšäžã®æ±ºå®ã®1ã€ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ©èœãåå¥ã®ã¢ãžã¥ãŒã«ã«åé¢ããæ¹æ³ã決å®ããããšã§ãã
ã¢ãžã¥ãŒã«ã¯ãäžé£ã®é¢é£ããæ©èœãã«ãã»ã«åããäžé£ã®ç°ãªã責任ãè² ãå¿
èŠããããŸãã ã¢ãžã¥ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åçŽã»ã¯ã·ã§ã³ãŸãã¯ãµãŒãã¹ã®æ°Žå¹³ã¬ã€ã€ãŒãè¡šãããšãã§ããŸãã 倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã«ã¯ãäž¡æ¹ã®ã¿ã€ãã®ã¢ãžã¥ãŒã«ããããŸãã


倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¢ãžã¥ãŒã«ãåçŽã¹ã©ã€ã¹ãšæ°Žå¹³ã¬ã€ã€ãŒã®äž¡æ¹ã«ç·šæã§ããŸãã ããšãã°ãã¢ãžã¥ãŒã«ã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- Stock Trader Reference ImplementationïŒStock Trader RIïŒã®ãã¥ãŒã¹ã¢ãžã¥ãŒã«ãªã©ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³æ©èœãå«ãã¢ãžã¥ãŒã«ã
- 賌å
¥ãè«æ±ãç·åå®å
åž³ãªã©ãå€æ°ã®é¢é£ãã䜿çšã»ã¯ã·ã§ã³ã®ç¹å®ã®ãµãã·ã¹ãã ãŸãã¯æ©èœãå«ãã¢ãžã¥ãŒã«ã
- ãžã£ãŒããªã³ã°ããã£ãã·ã¥ãæ¿èªãµãŒãã¹ãªã©ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹ããŸãã¯WebãµãŒãã¹ãå«ãã¢ãžã¥ãŒã«ã
- ä»ã®å
éšã·ã¹ãã ã«å ããŠãSiebel CRMãSAPãªã©ã®åºå¹¹æ¥åïŒLOBïŒã·ã¹ãã ãåŒã³åºããµãŒãã¹ãå«ãã¢ãžã¥ãŒã«ã
ã¢ãžã¥ãŒã«ã«ã¯ãä»ã®ã¢ãžã¥ãŒã«ã«å¯Ÿããæå°éã®äŸåé¢ä¿ã»ãããå¿
èŠã§ãã ã¢ãžã¥ãŒã«ãå¥ã®ã¢ãžã¥ãŒã«ã«äŸåããŠããå Žåãç¹å®ã®ã¿ã€ãã§ã¯ãªããå
±æã©ã€ãã©ãªã§å®çŸ©ãããã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠããŸãã¯
EventAggregator
ã䜿çšããŠã€ãã³ããä»ããŠä»ã®ã¢ãžã¥ãŒã«ãšéä¿¡ããããšã«ãããã¢ãžã¥ãŒã«ã«çæ¥ç¶ããå¿
èŠããããŸãã
ã¢ãžã¥ãŒã«æ¹åŒã®ååã®ç®çã¯ãæ©èœãæè¡ãè¿œå ããã³åé€ãããå Žåã§ããæè»ã§ä¿å®ãããããå®å®ããããã«ã¢ããªã±ãŒã·ã§ã³ãåå²ããããšã§ãã ãããå®çŸããæè¯ã®æ¹æ³ã¯ãã¢ãžã¥ãŒã«ãå¯èœãªéãç¬ç«ããæ確ã«å®çŸ©ãããã€ã³ã¿ãŒãã§ãŒã¹ãæã¡ãå¯èœãªéãåé¢ãããããã«ã¢ããªã±ãŒã·ã§ã³ãéçºããããšã§ãã
ãããžã§ã¯ããšã¢ãžã¥ãŒã«ã®æ¯çã決å®ãã
ã¢ãžã¥ãŒã«ãäœæããŠããã±ãŒãžåããæ¹æ³ã¯ããã€ããããŸãã æšå¥šãããæãäžè¬çãªæ¹æ³ã¯ãã¢ãžã¥ãŒã«ããšã«1ã€ã®ã¢ã»ã³ããªãäœæããããšã§ãã ããã«ãããã¢ãžã¥ãŒã«ãè«ççã«åé¢ããé©åãªã«ãã»ã«åãä¿é²ã§ããŸãã ãŸããã¢ã»ã³ããªãã¢ãžã¥ãŒã«ãšããŠããŸãã¯ãã®éã«ã€ããŠè©±ãããšãã§ããŸãã ãã ããåäžã®ã¢ã»ã³ããªã«è€æ°ã®ã¢ãžã¥ãŒã«ãå«ãŸããããšã劚ãããã®ã¯ãããŸãããå Žåã«ãã£ãŠã¯ããœãªã¥ãŒã·ã§ã³å
ã®ãããžã§ã¯ãã®æ°ãæå°éã«æããããšãæãŸããå ŽåããããŸãã 倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã«ã¯ã10ã50åã®ã¢ãžã¥ãŒã«ããããŸãã åã¢ãžã¥ãŒã«ãç¬èªã®ãããžã§ã¯ãã«è»¢éãããšããœãªã¥ãŒã·ã§ã³ãè€éã«ãªããVisual Studioã®ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã ãããžã§ã¯ããŸãã¯ã¢ã»ã³ããªããšã«1ã€ã®ã¢ãžã¥ãŒã«ã«åºå·ãããå Žåãã¢ãžã¥ãŒã«ãŸãã¯ã¢ãžã¥ãŒã«ã®ã»ãããç¬èªã®ãœãªã¥ãŒã·ã§ã³ã«åå²ããããšãçã«ããªã£ãŠããå ŽåããããŸãã
XAPããã³ã¢ãžã¥ãŒã«ãã¡ã¯ã¿ãªã³ã°
Silverlightã¢ããªã±ãŒã·ã§ã³ã®å Žåãã¢ãžã¥ãŒã«ã¯éåžžãåå¥ã®XAPãã¡ã€ã«ã«ããã±ãŒãžåãããŸãããå Žåã«ãã£ãŠã¯ãXAPã«è€æ°ã®ã¢ãžã¥ãŒã«ãããå ŽåããããŸãã ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãšæ°ãããªãã·ã§ã³ã®æå¹åã«å¿
èŠãªããŠã³ããŒããªã¯ãšã¹ãã®æ°ãšãµã€ãºãæå°éã«æããããã«å¿
èŠãªXAPãã¡ã€ã«ã®æ°ãæ€èšããŸãã åã¢ãžã¥ãŒã«ãç¬èªã®ãããžã§ã¯ã/ã¢ã»ã³ããªã«åé¢ããå Žåã¯ãåã¢ã»ã³ããªã«ç¬èªã®XAPãå±éçšã«æ¿å
¥ããããè€æ°ã®ã¢ã»ã³ããªãåäžã®XAPã«å«ãããã決å®ããå¿
èŠããããŸãã
åäžã®XAPãã¡ã€ã«ã«è€æ°ã®ã¢ãžã¥ãŒã«ãå«ãããåå²ãããã®éžæã«åœ±é¿ããããã€ãã®èŠå ïŒ
- ããŠã³ããŒããµã€ãºãšå
±æäŸåé¢ä¿ã åXAPãã¡ã€ã«ã«ã¯ããã®å®£èšãš.zipããã±ãŒãžã«ããããªäœåãªãµã€ãºã®ãªãŒããŒãããããããŸãã ããã«ãã¢ãžã¥ãŒã«éã«å
±ââéã®äŸåé¢ä¿ããããäŸåã¢ãžã¥ãŒã«ãŸãã¯ãã£ãã·ã¥ã©ã€ãã©ãªã«å±ããŠããªãå ŽåãåXAPã«ã¯ãããã®äŸåã©ã€ãã©ãªãå«ãŸãããããè² è·ãµã€ãºã倧å¹
ã«å¢å ããå¯èœæ§ããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã§è€æ°ã®ã¢ãžã¥ãŒã«ãå¿
èŠãªå Žåã®åæã ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ãã¥ãŒãæäŸãããªã©ãè€æ°ã®ã¢ãžã¥ãŒã«ãåæã«ããŒãããŠäœ¿çšããå Žåãããããåäžã®XAPãã¡ã€ã«ã«ããã¯ãããšãããŠã³ããŒããå°ãéããªããäž¡æ¹ã®ã¢ãžã¥ãŒã«ãã¯ã©ã€ã¢ã³ãããåæã«ç©ççã«ã¢ã¯ã»ã¹å¯èœã«ãªããŸãã Prismã®ã¢ãžã¥ãŒã«æ©èœã¯ãäŸåé¢ä¿ãæãã¢ãžã¥ãŒã«ãæ£ããé åºã§ããŒããããããã«ããŸãã ãã ããããŠã³ããŒãã®åèšãµã€ãºãåãã§ãã£ãŠãã1ã€ã§ã¯ãªã2ã€ã®ããŠã³ããŒããäœæããå Žåãããããªããã©ãŒãã³ã¹ã®ãªãŒããŒããããçºçããŸãã
- ããŒãžã§ã³ç®¡çã¢ãžã¥ãŒã«ã ç°ãªãã¢ãžã¥ãŒã«ãç¬ç«ããã¿ã€ã ã©ã€ã³ã§éçºãããæœåšçã«åå¥ã«å±éãããå Žåãããããå¥ã
ã®XAPã«é
眮ããŠãç°ãªãããŒãžã§ã³ã§ãããããã«ããŒã¯ããç¬ç«ããŠæŽæ°ã§ããããã«ããããšãã§ããŸãã
åXAPã§åãã¢ã»ã³ããªãè€æ°åããŒãããªãããã«ããã«ã¯ã次ã®2ã€ã®ã¢ãããŒãã䜿çšã§ããŸãã- å
±æäŸåé¢ä¿ãå¥ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã¢ãžã¥ãŒã«ã«æ¡åŒµãããã®å
±æã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ã䜿çšããæ¶èåã¢ãžã¥ãŒã«ãçšæããŸãã
- Silverlightã®ã¢ã»ã³ããªã©ã€ãã©ãªãã£ãã·ã¥ã䜿çšããŠãPrismã¢ãžã¥ãŒã«ããŒããŒã§ã¯ãªããSilverlightã«ãã£ãŠäžåºŠèªã¿èŸŒãŸãããã£ãã·ã¥ãããå
±æã©ã€ãã©ãªã«å
±æã¿ã€ããé
眮ããŸãã
äŸåæ§æ³šå
¥ã䜿çšããŠççµåãå®çŸãã
ã¢ãžã¥ãŒã«ã¯ããã¹ãã¢ããªã±ãŒã·ã§ã³ãŸãã¯ä»ã®ã¢ãžã¥ãŒã«ã«ãã£ãŠæäŸãããã³ã³ããŒãã³ããšãµãŒãã¹ã«äŸåããå ŽåããããŸããPrismã¯ãã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ãç»é²ããŠãæ£ããé åºã§ããŒãããã³åæåããæ©èœããµããŒãããŠããŸããPrismã¯ãããŒãåŸã®ã¢ãžã¥ãŒã«ã®åæåããµããŒãããŠããŸããåæåäžã«ãã¢ãžã¥ãŒã«ã¯ãå¿
èŠãªè¿œå ã®ã³ã³ããŒãã³ãããã³ãµãŒãã¹ãžã®ãªã³ã¯ãåä¿¡ããããä»ã®ã¢ãžã¥ãŒã«ã§äœ¿çšã§ããããã«ããããã«å«ãŸããã³ã³ããŒãã³ãããã³ãµãŒãã¹ãç»é²ãããã§ããŸããã¢ãžã¥ãŒã«ã¯ãç¹å®ã®ã¿ã€ããçŽæ¥äœæãã代ããã«ãç¬ç«ããã¡ã«ããºã ã䜿çšããŠå€éšã€ã³ã¿ãŒãã§ã€ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãååŸããå¿
èŠããããŸãã圌ã¯ãäŸåæ§æ³šå
¥ã³ã³ãããŸãã¯ãã¡ã¯ããªãµãŒãã¹ãéããŠãããè¡ãããšãã§ããŸãã UnityãMEFãªã©ã®äŸåæ§æ³šå
¥ã³ã³ãããŒã䜿çšãããšãåã¯äŸåæ§æ³šå
¥ã«ãã£ãŠã€ã³ã¿ãŒãã§ã€ã¹ã€ã³ã¹ã¿ã³ã¹ãèªåçã«ååŸã§ããŸãã Prismã¯UnityãšMEFã®äž¡æ¹ãšçµ±åããŠãã¢ãžã¥ãŒã«ãäŸåæ§æ³šå
¥ã¡ã«ããºã ãç°¡åã«äœ¿çšã§ããããã«ããŸãã次ã®å³ã¯ãã³ã³ããŒãã³ãããã³ãµãŒãã¹ãžã®ãªã³ã¯ãååŸãŸãã¯ç»é²ããããã«å¿
èŠãªã¢ãžã¥ãŒã«ãããŒãããäžè¬çãªããã»ã¹ã瀺ããŠããŸãã
ãã®äŸã§ã¯ãã¢ã»ã³ããªOrdersModule
ã¯ã¯ã©ã¹ãå®çŸ©ããŸãOrdersRepository
ïŒé åºæ©èœãå®è£
ããä»ã®ãã¥ãŒããã³ã¯ã©ã¹ãšãšãã«ïŒãã¢ã»ã³ããªCustomerModule
ã¯ããµãŒãã¹ã«ãã£ãŠæäŸãããã€ã³ã¿ãŒãã§ã€ã¹ã«åºã¥ãã¯ã©ã¹CustomersViewModel
ã«äŸåããã¯ã©ã¹ãå®çŸ©OrdersRepository
ããŸããã¢ããªã±ãŒã·ã§ã³ãšããŠã³ããŒãããã»ã¹ã®èµ·åã«ã¯ã次ã®æé ãå«ãŸããŸãã- ããŒãã¹ãã©ããã¯ã¢ãžã¥ãŒã«ã®åæåããã»ã¹ãéå§ããã¢ãžã¥ãŒã«ããŒããŒã¯ãããŒãããŠåæåããŸã
OrdersModule
ã - åæåãã§ãŒãº
OrdersModule
ã§OrdersRepository
ã¯ãã³ã³ããã«ç»é²ããŸãã - ã¢ãžã¥ãŒã«ããŒããŒãããŒããããŸã
CustomersModule
ãã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿é åºã¯ãã¡ã¿ããŒã¿ã«åºã¥ããŠæ±ºå®ã§ããŸãã CustomersModule
CustomerViewModel
, . CustomerViewModel
OrdersRepository
( ) . , , OrdersModule
. CustomerViewModel
OrderRepository
.
ã泚æ
, , OrderRespository
( IOrderRepository
), , , , . , CustomersModule
OrdersModule
.
äž¡æ¹ã®ã¢ãžã¥ãŒã«ã¯ãäŸåæ§æ³šå
¥ã³ã³ããã«æé»çã«äŸåããŠããããšã«æ³šæããŠãã ããããã®äŸåé¢ä¿ã¯ãããŒãããŒããŒã§ã®ã¢ãžã¥ãŒã«äœæäžã«å°å
¥ãããŸããåºæ¬ã·ããªãª
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã§ã¢ãžã¥ãŒã«ãæäœãããšãã«çºçããäžè¬çãªã·ããªãªã«ã€ããŠèª¬æããŸãããããã®ã·ããªãªã«ã¯ãã¢ãžã¥ãŒã«å®çŸ©ãã¢ãžã¥ãŒã«ã®ç»é²ãšæ€åºãã¢ãžã¥ãŒã«ã®ããŒããã¢ãžã¥ãŒã«ã®åæåãã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ã®æ±ºå®ããªã³ããã³ãã§ã®ã¢ãžã¥ãŒã«ã®ããŒããããã¯ã°ã©ãŠã³ãã§ã®ãªã¢ãŒãã¢ãžã¥ãŒã«ã®ããŒããããŒãããã»ã¹ã®ã¹ããŒã¿ã¹ã®æ±ºå®ãå«ãŸããŸããã³ãŒããXAMLãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ããŸãã¯ããŒã«ã«ãã£ã¬ã¯ããªãã¹ãã£ã³ããããšã§ãã¢ãžã¥ãŒã«ãç»é²ã§ããŸããã¢ãžã¥ãŒã«å®çŸ©
ã¢ãžã¥ãŒã«ã¯ãåå¥ã«éçºããã¹ãããããã€ãããã³ã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããæ©èœãšãªãœãŒã¹ã®è«çã»ããã§ããåã¢ãžã¥ãŒã«ã«ã¯ãã¢ãžã¥ãŒã«ã®åæåãšãã®æ©èœã®ã¢ããªã±ãŒã·ã§ã³ãžã®çµ±åãæ
åœããäžå€®ã¯ã©ã¹ããããŸãããã®ã¯ã©ã¹ã¯ã次ã«IModule
瀺ãããã«ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããŸãã public class MyModule : IModule { public void Initialize() {
ã泚æ
ã¢ãžã¥ãŒã«åã¯ãã¢ããªã±ãŒã·ã§ã³å
šäœã§äžæã§ãªããã°ãªããŸããã
ã¡ãœããã®å®è£
æ¹æ³Initialize
ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ã«ãã£ãŠç°ãªããŸããã¢ãžã¥ãŒã«ã¯ã©ã¹ã¿ã€ããåæåã¢ãŒããããã³ã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ã¯ãã¢ãžã¥ãŒã«ã«ã¿ãã°ã§æå®ãããŸãããã£ã¬ã¯ããªå
ã®åã¢ãžã¥ãŒã«ã«å¯ŸããŠãããŒããŒã¯ã¢ãžã¥ãŒã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããmethodãåŒã³åºããŸãInitialize
ãã¢ãžã¥ãŒã«ã¯ãã¢ãžã¥ãŒã«ã«ã¿ãã°ã§å®çŸ©ãããé åºã§åŠçãããŸããå®è¡æã®åæåé åºã¯ãã¢ãžã¥ãŒã«ãããŒãããã䜿çšå¯èœã«ãªããäŸåé¢ä¿ãæºããããã¿ã€ãã³ã°ã«äŸåããŸããã¢ããªã±ãŒã·ã§ã³ã䜿çšããã¢ãžã¥ãŒã«ã«ã¿ãã°ã®ã¿ã€ãã«å¿ããŠãã¢ãžã¥ãŒã«ã¯ã©ã¹å
ã®å®£èšå±æ§ãŸãã¯ã¢ãžã¥ãŒã«ã«ã¿ãã°ãã¡ã€ã«å
ã§ãã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ãèšå®ã§ããŸãã以äžã®ã»ã¯ã·ã§ã³ã§ã¯ããã詳现ãªæ
å ±ãæäŸããŸããç»é²ãšã¢ãžã¥ãŒã«ã®æ€åº
ã¢ããªã±ãŒã·ã§ã³ãããŒãã§ããã¢ãžã¥ãŒã«ã¯ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã§å®çŸ©ãããŸãã Prism Module Loaderã¯ãã¢ãžã¥ãŒã«ã«ã¿ãã°ã䜿çšããŠãããŠã³ããŒãå¯èœãªã¢ãžã¥ãŒã«ãããŒãããã¿ã€ãã³ã°ãããã³ããŒãããé åºã決å®ããŸããã¢ãžã¥ãŒã«ã«ã¿ãã°ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããã¯ã©ã¹ã§ãIModuleCatalog
ãã¢ãžã¥ãŒã«ã«ã¿ãã°ã¯ã©ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åæåäžã«ããŒããŒã¯ã©ã¹ã«ãã£ãŠäœæãããŸãã Prismã¯ãå¿
èŠãªã¢ãžã¥ãŒã«ã«ã¿ãã°ãéžæã§ããã¢ãžã¥ãŒã«ã«ã¿ãã°ã®ããŸããŸãªå®è£
ãæäŸããŸãããŸããã¡ãœãããåŒã³åºãAddModule
ããã¯ã©ã¹ãç¶æ¿ããŠãModuleCatalog
ç¹æ®ãªåäœã®ã¢ãžã¥ãŒã«ã«ã¿ãã°ãäœæããããšã«ãããå¥ã®ããŒã¿ãœãŒã¹ããã¢ãžã¥ãŒã«ã«ã¿ãã°ãäœæããããšãã§ããŸããã泚æ
éåžžãPrismã®ã¢ãžã¥ãŒã«ã¯ãäŸåé¢ä¿æ³šå
¥ã³ã³ãããŒãšCommon Service Locatorã䜿çšããŠãã¢ãžã¥ãŒã«ã®åæåã«å¿
èŠãªåã€ã³ã¹ã¿ã³ã¹ãååŸããŸããã¢ãžã¥ãŒã«ã®ç»é²ãæ€åºãããŒããããã³åæåã®å®å
šãªããã»ã¹ã¯ãŸã£ããåãã§ããã䜿çšãããã³ã³ãããŒã«ãã£ãŠè©³çŽ°ã¯ç°ãªãå ŽåããããŸããã¢ãããŒãéã®ã³ã³ããåºæã®éãã«ã€ããŠã¯ããã®ãããã¯å
šäœã§èª¬æããŸãã
ã³ãŒãã§ã®ã¢ãžã¥ãŒã«ã®ç»é²
æãåºæ¬çãªã¢ãžã¥ãŒã«ã«ã¿ãã°ã¯ãã¯ã©ã¹ã«ãã£ãŠæäŸããModuleCatalog
ãŸãããã®ãã£ã¬ã¯ããªã䜿çšããŠãã¢ãžã¥ãŒã«ã®ã¯ã©ã¹ã¿ã€ããæå®ããããšã«ãããã³ãŒãã§ã¢ãžã¥ãŒã«ãç»é²ã§ããŸããåæåã¢ãŒããšã¢ãžã¥ãŒã«åãèšå®ããããšãã§ããŸããã¢ãžã¥ãŒã«ãã¯ã©ã¹ModuleCatalog
ã«çŽæ¥ç»é²ããã«AddModule
ã¯Bootstrapper
ãã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºããŸãã protected override void ConfigureModuleCatalog() { Type moduleCType = typeof(ModuleC); ModuleCatalog.AddModule( new ModuleInfo() { ModuleName = moduleCType.Name, ModuleType = moduleCType.AssemblyQualifiedName, }); }
åã®äŸã§ã¯ãã·ã§ã«ã¯ã¢ãžã¥ãŒã«ãçŽæ¥åç
§ãããããã¡ãœããåŒã³åºãã§äœ¿çšã§ããã¢ãžã¥ãŒã«ã¯ã©ã¹ã®ã¿ã€ãã決å®ããŸãAddModule
ããã®ããããã®äŸã§ã¯typeof(Module)
ããã£ã¬ã¯ããªã«ã¢ãžã¥ãŒã«ãè¿œå ããããã«äœ¿çšããŠããŸããã泚æ
ã¢ããªã±ãŒã·ã§ã³ã«ã¢ãžã¥ãŒã«ã®ã¿ã€ããžã®çŽæ¥åç
§ãããå Žåãäžèšã®ããã«ãã®ã¿ã€ããè¿œå ã§ããŸãããã以å€ã®å Žåã¯ãå®å
šä¿®é£Ÿã¿ã€ãåãšã¢ã»ã³ããªã®å ŽæãæäŸããå¿
èŠããããŸãã
ã³ãŒãå
ã®æ±ºæã¢ãžã¥ãŒã«ã«ã¿ãã°ã®ä»ã®äŸãèŠãããã«åç
§StockTraderRIBootstrapper.cs
ã«ã¹ããã¯ãã¬ãŒããŒRIãã泚æ
Bootstrapper
CreateModuleCatalog
, ModuleCatalog
. , ModuleCatalog
, .
XAML
XAMLãã¡ã€ã«ã§ã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã宣èšçã«å®çŸ©ã§ããŸãã XAMLãã¡ã€ã«ã¯ãäœæããã¢ãžã¥ãŒã«ã«ã¿ãã°ã¯ã©ã¹ãšè¿œå ããã¢ãžã¥ãŒã«ã決å®ããŸããéåžžã.xaml
ãã¡ã€ã«ã¯ãªãœãŒã¹ãšããŠã·ã§ã«ãããžã§ã¯ãã«è¿œå ãããŸããã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã¯ãã¡ãœãããåŒã³åºãããšã§ããŒãããŒããŒã«äœæãããŸãCreateFromXaml
ãæè¡çãªèŠ³ç¹ããèŠããšModuleCatalog
ãXAMLãã¡ã€ã«ã¯ã€ã³ã¹ã¿ã³ã¹åããããªããžã§ã¯ãã®éå±€ãåã«å®çŸ©ããã ããªã®ã§ããã®ã¢ãããŒãã¯ã³ãŒãã®å®çŸ©ã«äŒŒãŠããŸãã次ã®ã³ãŒãäŸã¯ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªãå®çŸ©ããXAMLãã¡ã€ã«ã瀺ããŠããŸãã <Modularity:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism"> <Modularity:ModuleInfoGroup Ref="ModuleB.xap" InitializationMode="WhenAvailable"> <Modularity:ModuleInfo ModuleName="ModuleB" ModuleType="ModuleB.ModuleB, ModuleB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </Modularity:ModuleInfoGroup> <Modularity:ModuleInfoGroup InitializationMode="OnDemand"> <Modularity:ModuleInfo Ref="ModuleE.xap" ModuleName="ModuleE" ModuleType="ModuleE.ModuleE, ModuleE, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Modularity:ModuleInfo Ref="ModuleF.xap" ModuleName="ModuleF" ModuleType="ModuleF.ModuleF, ModuleF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" > <Modularity:ModuleInfo.DependsOn> <sys:String>ModuleE</sys:String> </Modularity:ModuleInfo.DependsOn> </Modularity:ModuleInfo> </Modularity:ModuleInfoGroup> <Modularity:ModuleInfo Ref="ModuleD.xap" ModuleName="ModuleD" ModuleType="ModuleD.ModuleD, ModuleD, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </Modularity:ModuleCatalog>
ã泚æ
ModuleInfoGroups
åã.xapãã¡ã€ã«ãŸãã¯ã¢ã»ã³ããªå
ã«ããã¢ãžã¥ãŒã«ãåãæ¹æ³ã§åæåãããã¢ãžã¥ãŒã«ããŸãã¯åãã°ã«ãŒãå
ã®ã¢ãžã¥ãŒã«ã®ã¿ã«äŸåé¢ä¿ãæã€ã¢ãžã¥ãŒã«ãã°ã«ãŒãåãã䟿å©ãªæ¹æ³ãæäŸããŸããã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ã¯ã¢ãžã¥ãŒã«å
ã§å®çŸ©ã§ãModuleInfoGroup
ãŸãããç°ãªãã¢ãžã¥ãŒã«ã®ã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ãæå®ããããšã¯ã§ããŸããModuleInfoGroups
ãã¢ãžã¥ãŒã«ãã¢ãžã¥ãŒã«ã°ã«ãŒãã«å
¥ããããšã¯ãªãã·ã§ã³ã§ããã°ã«ãŒãã«èšå®ãããããããã£ã¯ãã°ã«ãŒãå
ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ã«é©çšãããŸããã¢ãžã¥ãŒã«ã¯ã°ã«ãŒãã«å±ããã«ç»é²ããããšãã§ããŸãã
ã¯ã©ã¹ã§Bootstrapper
ã¯ãModuleCatalog
以äžã«ç€ºãããã«ãXAMLãã¡ã€ã«ãã®ãœãŒã¹ã§ããããšã瀺ãå¿
èŠããããŸãã protected override IModuleCatalog CreateModuleCatalog() { return ModuleCatalog.CreateFromXaml( new Uri("/MyProject.Silverlight;component/ModulesCatalog.xaml", UriKind.Relative)); }
æ§æãã¡ã€ã«ã䜿çšããã¢ãžã¥ãŒã«ã®ç»é²
WPFã§ã¯ããã¡ã€ã«ã§ã¢ãžã¥ãŒã«æ
å ±ãæå®ã§ããŸãApp.config
ããã®ã¢ãããŒãã®å©ç¹ã¯ããã®ãã¡ã€ã«ãã¢ããªã±ãŒã·ã§ã³ã«ã³ã³ãã€ã«ãããªãããšã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³ãåã³ã³ãã€ã«ããã«ãå®è¡æã«ã¢ãžã¥ãŒã«ãç°¡åã«è¿œå ãŸãã¯åé€ã§ããŸãã次ã®ã³ãŒãã¯ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªãå®çŸ©ããæ§æãã¡ã€ã«ã瀺ããŠããŸããã¢ãžã¥ãŒã«ãèªåçã«ããŒãããå Žåã¯ããã€ã³ã¹ããŒã«ãstartupLoaded="true"
ãŸãã <modules> <module assemblyFile="ModularityWithUnity.Desktop.ModuleE.dll" moduleType="ModularityWithUnity.Desktop.ModuleE, ModularityWithUnity.Desktop.ModuleE, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleE" startupLoaded="false" /> <module assemblyFile="ModularityWithUnity.Desktop.ModuleF.dll" moduleType="ModularityWithUnity.Desktop.ModuleF, ModularityWithUnity.Desktop.ModuleF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleF" startupLoaded="false"> <dependencies> <dependency moduleName="ModuleE"/> </dependencies> </module> </modules>
ã泚æ
ã¢ã»ã³ããªãã°ããŒãã«ã¢ã»ã³ããªãã£ãã·ã¥ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ãšåããã©ã«ããŒã«ããå Žåã§ããå±æ§ãå¿
èŠã§ãassemblyFile
ããã®å±æ§ã¯ã䜿çšããmoduleType
æ£ããå±æ§ã«ãããããIModuleTypeLoader
ããã«äœ¿çšãããŸãã
Bootstrapper
ã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã§ã¯ãæ§æãã¡ã€ã«ã®ãœãŒã¹ãæå®ããå¿
èŠããããŸãModuleCatalog
ããããè¡ãã«ConfigurationModuleCatalog
ã¯ã次ã®ã³ãŒãã«ç€ºãããã«ã¯ã©ã¹ã䜿çšããŸãã protected override IModuleCatalog CreateModuleCatalog() { return new ConfigurationModuleCatalog(); }
ã泚æ
ã¢ãžã¥ãŒã«ãConfigurationModuleCatalog
ã³ãŒãã«è¿œå ã§ããŸããããã䜿çšããŠãããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®æ©èœã«çµ¶å¯Ÿã«å¿
èŠãªã¢ãžã¥ãŒã«ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã«è¿œå ãããããã«ããããšãã§ããŸãã
ã泚æ
Silverlightã¯æ§æãã¡ã€ã«ããµããŒãããŠããŸãããSilverlightã§ã®æ§æã«ãã®ã¢ãããŒãã䜿çšããå Žåã¯ModuleCatalog
ããµãŒããŒäžã®WebãµãŒãã¹ããã¢ãžã¥ãŒã«ã®æ§æãèªã¿åãç¬èªã®ãäœæããããšããå§ãããŸãã
ããŒã«ã«ãã£ã¬ã¯ããªã§ã®ã¢ãžã¥ãŒã«ã®æ€çŽ¢
ãã®ã¯ã©ã¹ãDirectoryModuleCatalog
䜿çšãããšãããŒã«ã«ãã£ã¬ã¯ããªãWPFã®ã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªãšããŠèšå®ã§ããŸãããã®ã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã¯ãæå®ããããã©ã«ããŒãã¹ãã£ã³ããã¢ããªã±ãŒã·ã§ã³ã«ã¢ãžã¥ãŒã«ãæäŸããã¢ã»ã³ããªãæ¢ããŸãããã®ã¢ãããŒãã䜿çšããã«ã¯ãã¢ãžã¥ãŒã«ã¯ã©ã¹ã®å®£èšå±æ§ã䜿çšããŠãã¢ãžã¥ãŒã«åãšããããæã€äŸåé¢ä¿ã決å®ããå¿
èŠããããŸãã次ã®ã³ãŒãäŸã¯ãããŒã«ã«ãã£ã¬ã¯ããªã§ã¢ã»ã³ããªãæ€åºãããšãã«ããŒã¿ãåã蟌ãã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªã瀺ããŠããŸãã protected override IModuleCatalog CreateModuleCatalog() { return new DirectoryModuleCatalog() {ModulePath = @".\Modules"}; }
ã泚æ
Silverlightã®ã»ãã¥ãªãã£ã¢ãã«ã§ã¯ããã¡ã€ã«ã·ã¹ãã ããã¢ã»ã³ããªãèªã¿èŸŒãããšãã§ããªããããSilverlightã§ã¯ãã®æ©èœã¯ãµããŒããããŠããŸããã
ã¢ãžã¥ãŒã«ã®ããŒã
äžåºŠModuleCatalog
ãã«ãã¢ãžã¥ãŒã«ãããŒãããã³åæåããæºåãã§ããŠããŸããã¢ãžã¥ãŒã«ãããŒããããšãã¢ãžã¥ãŒã«ã®ã¢ã»ã³ããªããã£ã¹ã¯ããã¡ã¢ãªã«ããŒããããŸããã¢ã»ã³ããªããã£ã¹ã¯äžã«ãªãå Žåãæåã«å¥ã®ãœãŒã¹ããååŸããå¿
èŠããããŸãããã®äŸã¯ãSilverlight .xap
ãã¡ã€ã«ã䜿çšããŠã€ã³ã¿ãŒãããããã¢ã»ã³ããªãããŠã³ããŒãããããšã§ããModuleManager
åæåããã³èªã¿èŸŒã¿ããã»ã¹ã®èª¿æŽãæ
åœããŸããã¢ãžã¥ãŒã«ã®åæå
ã¢ãžã¥ãŒã«ãããŒãããåŸããããã¯åæåãããŸããããã¯ãã¢ãžã¥ãŒã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã®ã¡ãœãããInitialize
åŒã³åºãããããšãæå³ããŸããåæåã¯ãã¢ãžã¥ãŒã«ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åãããå Žæã§ããã¢ãžã¥ãŒã«ãåæåãããšãã¯ã次ã®ãªãã·ã§ã³ãèæ
®ããŠãã ããã- . , , .
- . / , .
Initialize
, . , , , . , . , MenuService
( ), Initialize
â , .
ã泚æ
. , Initialize
, . , . , , , «» .
- . , Unity MEF, . , .
ã¢ãžã¥ãŒã«ã¯ä»ã®ã¢ãžã¥ãŒã«ã«äŸåããå ŽåããããŸããå Žåã¯ã¢ãžã¥ãŒã«AãäŸåããã¢ãžã¥ãŒã«Bãã¢ãžã¥ãŒã«Bã¯ãåã«åæåãããªããã°ãªããªãã¢ãžã¥ãŒã«AãModuleManager
ãããã®äŸåé¢ä¿ãç£èŠããæ£ããé åºã§ã¢ãžã¥ãŒã«ãåæåããŸããã¢ãžã¥ãŒã«ã«ã¿ãã°ã®å®çŸ©æ¹æ³ã«å¿ããŠãã³ãŒããæ§æããŸãã¯XAMLã§ã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ãå®çŸ©ã§ããŸããã³ãŒãã§ã®äŸåé¢ä¿ã®å®çŸ©
ã³ãŒãã§ã¢ãžã¥ãŒã«ãç»é²ãããããã©ã«ããŒã§ããããèŠã€ããWPFã¢ããªã±ãŒã·ã§ã³ã®å ŽåãPrismã¯ã次ã®äŸã«ç€ºãããã«ãã¢ãžã¥ãŒã«ã¯ã©ã¹ã®å®£èšå±æ§ãæäŸããŸãã [Module(ModuleName = "ModuleA")] [ModuleDependency("ModuleD")] public class ModuleA: IModule { ... }
XAMLã§ã®äŸåé¢ä¿ã®å®çŸ©
以äžã®XAMLã·ã§ãŒã¢ãžã¥ãŒã«FãäŸåããã¢ãžã¥ãŒã«Eã <Modularity:ModuleInfo Ref="ModuleF.xap" ModuleName="ModuleF" ModuleType="ModuleF.ModuleF, ModuleF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" > <Modularity:ModuleInfo.DependsOn> <sys:String>ModuleE</sys:String> </Modularity:ModuleInfo.DependsOn> </Modularity:ModuleInfo>
æ§æãã¡ã€ã«ã§ã®äŸåé¢ä¿ã®å®çŸ©
次ã®äŸã¯ããã®ãã¡ã€ã«App.configãã¡ã€ã«ã瀺ããŠããã¢ãžã¥ãŒã«Dã¯ãäŸåã¢ãžã¥ãŒã«Bãã <modules> <module assemblyFile="Modules/ModuleD.dll" moduleType="ModuleD.ModuleD, ModuleD" moduleName="ModuleD"> <dependencies> <dependency moduleName="ModuleB"/> </dependencies> </module>
ã¢ãžã¥ãŒã«ã®ãªã³ããã³ãèªã¿èŸŒã¿
ãªã³ããã³ãã§ããŒãã¢ãžã¥ãŒã«ã«ãããªãã¯åœŒããèšå®modulesãã£ã¬ã¯ããªãªãã·ã§ã³ã«ããŒãããå¿
èŠãããããšãæå®ããå¿
èŠããããŸãInitializationMode
ã«OnDemand
ããã®åŸãã¢ãžã¥ãŒã«ã®ããŒããèŠæ±ããã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããå¿
èŠããããŸããã³ãŒãã§ã®ãªã³ããã³ãããŒããžã§ã
ã¢ãžã¥ãŒã«ãå±æ§ãä»ããŠãªã³ããã³ãã§ããŒãããå¿
èŠããããšãã決å®ã次ã®äŸã«ç€ºããŸãã protected override void ConfigureModuleCatalog() { Type moduleCType = typeof(ModuleC); this.ModuleCatalog.AddModule(new ModuleInfo() { ModuleName = moduleCType.Name, ModuleType = moduleCType.AssemblyQualifiedName, InitializationMode = InitializationMode.OnDemand }); }
XAMLã®ãªã³ããã³ãããŠã³ããŒããžã§ã
InitializationMode.OnDemand
次ã®ã³ãŒãäŸã«ç€ºãããã«ãXAMLã§ã¢ãžã¥ãŒã«ãã£ã¬ã¯ããªãå®çŸ©ããã¿ã€ãã³ã°ã決å®ã§ããŸãã ... <Modularity:ModuleInfoGroup InitializationMode="OnDemand"> <Modularity:ModuleInfo Ref="ModuleE.xap" ModuleName="ModuleE" ModuleType="ModuleE.ModuleE, ModuleE, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> ...
æ§æãã¡ã€ã«ã®ãªã³ããã³ãããŒããžã§ã
次ã®ã³ãŒãäŸã«ç€ºãããã«ãInitializationMode.OnDemand
ãã¡ã€ã«ã§ã¢ãžã¥ãŒã«ã®ãã£ã¬ã¯ããªããã€æå®ãããã決å®ã§ããŸãApp.config
ã ... <module assemblyFile="Modules/ModuleC.dll" moduleType="ModuleC.ModuleC, ModuleC" moduleName="ModuleC" startupLoaded="false"/> ....
ã¢ãžã¥ãŒã«ããŠã³ããŒããªã¯ãšã¹ã
ã¢ãžã¥ãŒã«ããªã³ããã³ãã§ããŠã³ããŒãå¯èœã§ãããšå€æãããåŸãã¢ããªã±ãŒã·ã§ã³ã¯ããŠã³ããŒããèŠæ±ã§ããŸããããŠã³ããŒããéå§ããã³ãŒãã¯IModuleManager
ãããŒããŒã«ãã£ãŠã³ã³ããã«ç»é²ããããµãŒãã¹ãžã®ãªã³ã¯ãååŸããå¿
èŠããããŸãã private void OnLoadModuleCClick(object sender, RoutedEventArgs e) { moduleManager.LoadModule("ModuleC"); }
ããã¯ã°ã©ãŠã³ãã§ã®ã¢ãžã¥ãŒã«ã®ãªã¢ãŒãèªã¿èŸŒã¿
ã¢ããªã±ãŒã·ã§ã³ã®èµ·ååŸããŸãã¯ãŠãŒã¶ãŒãå¿
èŠãªå Žåã«ã®ã¿ãã¢ãžã¥ãŒã«ãããã¯ã°ã©ãŠã³ãã§ããŠã³ããŒããããšãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãççž®ã§ããŸãããªã¢ãŒãããŒãçšã®ã¢ãžã¥ãŒã«ã®æºå
Silverlightã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¢ãžã¥ãŒã«ã¯.xap
ãã¡ã€ã«ã«ããã±ãŒãžåãããŸããã¢ãžã¥ãŒã«ãã¢ããªã±ãŒã·ã§ã³ãšã¯å¥ã«ããŠã³ããŒãããã«ã¯ãå¥ã®.xap
ãã¡ã€ã«ãäœæããŸãã.xap
å.xapãã¡ã€ã«ã®ãµã€ãºãšåŒãæãã«ããŠã³ããŒãèŠæ±ã®æ°ãæé©åããããã«ãåäžã®ãã¡ã€ã«ã«è€æ°ã®ã¢ãžã¥ãŒã«ãé
眮ããããšãã§ããŸããã泚æ
.xapãã¡ã€ã«ããšã«ãæ°ããSilverlightã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ããäœæããå¿
èŠããããŸããVisual Studio 2008ããã³2010ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ãã®ã¿ãåå¥ã®.xap
ãã¡ã€ã«ãçæããŸãããããã®ãããžã§ã¯ãã«ã¯App.xaml
ãã¡ã€ã«ããã¡ã€ã«ã¯å¿
èŠãããŸããMainPage.xaml
ã
ããŠã³ããŒã远跡
ãã®ã¯ã©ã¹ModuleManager
ã¯ãã¢ãžã¥ãŒã«ã®ããŒãã®é²è¡ç¶æ³ã远跡ããã€ãã³ããæäŸããŸããã¢ããããŒãããããã€ãæ°ãšå
šè² è·ãµã€ãºãæäŸããŠãé²è¡ç¶æ³ã®å²åãååŸããŸããããã䜿çšããŠãããŠã³ããŒãã®é²è¡ç¶æ³ãèŠèŠçã«è¡šç€ºã§ããŸãã this.moduleManager.ModuleDownloadProgressChanged += this.ModuleManager_ModuleDownloadProgressChanged;
void ModuleManager_ModuleDownloadProgressChanged(object sender, ModuleDownloadProgressChangedEventArgs e) { ... }
ã¢ãžã¥ãŒã«ãããŒããããããšã確èªãã
ãã®ãµãŒãã¹ModuleManager
ã¯ãã¢ãžã¥ãŒã«ãããŒãããããšãããŸãã¯ããŒãã§ããªããšãã«è¿œè·¡ããã€ãã³ããæäŸããŸãã this.moduleManager.LoadModuleCompleted += this.ModuleManager_LoadModuleCompleted;
void ModuleManager_LoadModuleCompleted(object sender, LoadModuleCompletedEventArgs e) { ... }
ã¢ããªã±ãŒã·ã§ã³ãšã¢ãžã¥ãŒã«ã®ççµåãç¶æããã«ã¯ããã®ã€ãã³ãã䜿çšããŠã¢ãžã¥ãŒã«ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããªãããã«ããå¿
èŠããããŸãã代ããã«ã¢ãžã¥ãŒã«ã¡ãœããã䜿çšããŠãã ããInitialize
ãLoadModuleCompletedEventArgs
ããããã£ãå«ãŸããŠããŸãIsErrorHandled
ãã¢ãžã¥ãŒã«ãããŒãã«å€±æããã¢ããªã±ãŒã·ã§ã³ãModuleManager
ãšã©ãŒã®å ±åãé²ãäŸå€ãã¹ããŒãããå Žåããã®ããããã£ãã«èšå®ããå¿
èŠããããŸãtrue
ãã泚æ
ã¢ãžã¥ãŒã«ãããŒãããŠåæåããåŸãã¢ãžã¥ãŒã«ã¢ã»ã³ããªãã¢ã³ããŒãããããšã¯ã§ããŸãããã¢ãžã¥ãŒã«ã€ã³ã¹ã¿ã³ã¹ãžã®åç
§ã¯Prismã©ã€ãã©ãªã«ãã£ãŠä¿åãããªããããåæåã®å®äºåŸã«ã¢ãžã¥ãŒã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã§ããŸãã
MEFã®ã¢ãžã¥ãŒã«
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãMEFãäŸåæ§æ³šå
¥ã³ã³ãããŒãšããŠäœ¿çšããå Žåã®éãã®ã¿ã匷調ããŸããã泚æ
MEFãMefBootstrapper
䜿çšããå Žåãã䜿çšãMefModuleManager
ãŸããæ°ããã¿ã€ããMEFã«ãã£ãŠã€ã³ããŒãããããšãã«æŽæ°ãããããã«ModuleManager
ãã€ã³ã¿ãŒãã§ã€ã¹IPartImportsSatisfiedNotification
ãæ¡åŒµããã³å®è£
ããŸãModuleCatalog
ã
MEFã䜿çšããŠã¢ãžã¥ãŒã«ãã³ãŒãã«ç»é²ãã
MEFã䜿çšããå ŽåãModuleExport
MEFãèªåçã«ããããæ€åºã§ããããã«ãã¢ãžã¥ãŒã«ã¯ã©ã¹ã«å±æ§ãé©çšã§ããŸãã [ModuleExport(typeof(ModuleB))] public class ModuleB : IModule { ... }
ãŸããMEFãAssemblyCatalog
䜿çšããŠãã¢ã»ã³ããªå
ã®ãšã¯ã¹ããŒãããããã¹ãŠã®ã¢ãžã¥ãŒã«ã¯ã©ã¹ã®æ€åºã«äœ¿çšã§ããã¯ã©ã¹AggregateCatalog
ãšãè€æ°ã®ãã£ã¬ã¯ããªãåäžã®è«çãã£ã¬ã¯ããªã«ããŒãžã§ããã¯ã©ã¹ã䜿çšããŠãã¢ãžã¥ãŒã«ãæ€åºããã³ããŒãã§ããŸããããã©ã«ãã§ã¯ãã¯ã©ã¹MefBootstrapper
ã¯ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãAggregateCatalog
ãã¡ãœããConfigureAggregateCatalog
ããªãŒããŒã©ã€ãããŠãã¢ã»ã³ããªãç»é²ã§ããŸãã protected override void ConfigureAggregateCatalog() { base.ConfigureAggregateCatalog();
ããªãºã ã®å®è£
ã§ã¯ãMefModuleManager
åæåAggregateCatalog
MEFãšããªãºã ãModuleCatalog
åŸã£ãŠããªãºã ã«ãã£ãŠæžãããã¢ãžã¥ãŒã«ãæ€åºå¯èœãModuleCatalog
ãŸãã¯AggregateCatalog
ãã泚æ
MEF㯠Lazy, Value
.
MEFã䜿çšããŠããŒã«ã«ãã£ã¬ã¯ããªã§ã¢ãžã¥ãŒã«ãæ€åºãã
MEFã¯ãDirectoryCatalog
ã¢ãžã¥ãŒã«ïŒããã³ãã®ä»ã®ãšã¯ã¹ããŒããããMEFã¿ã€ãïŒãå«ãã¢ã»ã³ããªã®ãã©ã«ããŒã衚瀺ããããã«äœ¿çšã§ããã¯ã©ã¹ãæäŸããŸãããã®å Žåãã¡ãœããConfigureAggregateCatalog
ããªãŒããŒã©ã€ãããŠãã£ã¬ã¯ããªãç»é²ããŸãããã®ã¢ãããŒãã¯WPFã§ã®ã¿äœ¿çšã§ããŸãã
ãã®ã¢ãããŒãã䜿çšããã«ModuleExport
ã¯ã次ã®äŸã«ç€ºãããã«ãæåã«å±æ§ã䜿çšããŠã¢ãžã¥ãŒã«åãšãã®äŸåé¢ä¿ãæå®ããå¿
èŠããããŸãã
protected override void ConfigureAggregateCatalog() { base.ConfigureAggregateCatalog(); DirectoryCatalog catalog = new DirectoryCatalog("DirectoryModules"); this.AggregateCatalog.Catalogs.Add(catalog); }
MEFã䜿çšããã³ãŒãã®äŸåé¢ä¿ã®å®çŸ©
WPFã¢ããªã±ãŒã·ã§ã³ã®å Žåã次ã®ããã«å±æ§ModuleExport
ã䜿çšããŸãã
[ModuleExport(typeof(ModuleA), DependsOnModuleNames = new string[] { "ModuleD" })] public class ModuleA : IModule { ... }
MEF , . MEF ModuleCatalog
, , ModuleCatalog
, XAML ( - ). ModuleCatalog
MEF, ModuleCatalog
, DependsOnModuleNames
. MEF ModuleCatalog
Silverlight, XAP.
MEF
MEF ModuleExport
, , InitializationMode
, , , .
[ModuleExport(typeof(ModuleC), InitializationMode = InitializationMode.OnDemand)] public class ModuleC : IModule { ... }
MEF
, Prism, MEF, MEF DeploymentCatalog
, .xap
.xap . MefXapModuleTypeLoader
DeploymentCatalog
AggregateCatalog
.
.xap
, . , , . Microsoft.Practices.Prism.MefExtensions.dll
.
, DLL 'Copy Local'=false
. .xap . .xap . , , , .xap , , .xap .
ã¢ã»ã³ããªãã£ãã·ã¥ã®è©³çŽ°ã«ã€ããŠã¯ãMSDNã®ãæ¹æ³ïŒã¢ã»ã³ããªã©ã€ãã©ãªãã£ãã·ã¥ã䜿çšããããåç
§ããŠãã ãã ãhttpïŒ//msdn.microsoft.com/en-us/library/dd833069ïŒ VS.95ïŒ.aspx
ã¢ãžã¥ã©ãŒã®è©³çŽ°Prismã®ååãšããŠãMEF for WPF QuickStartãŸãã¯Modularity with Unity for WPF QuickStartãåç
§ããŠãã ãããã¯ã€ãã¯ã¹ã¿ãŒãã®è©³çŽ°ã«ã€ããŠã¯ãWPFã®ã¢ãžã¥ãŒã«æ¹åŒã®ã¯ã€ãã¯ã¹ã¿ãŒããåç
§ããŠãã ããã
ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«äœ¿çšãããPrismã©ã€ãã©ãªé¢æ°ã«ã€ããŠã¯ããPrismã®æ¡åŒµãã®ãã¢ãžã¥ãŒã«ããåç
§ããŠãã ããã