рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╕реАрдмрд┐рд▓рд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ (MEF) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

MEF рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдФрд░ рджрдХреНрд╖рддрд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП .Net рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдЬрд▓реНрджреА рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреАред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдиреНрдпреВрдирддрдо рд╕реНрддрд░ рдХреЗ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рднрд╛рдЧреЛрдВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди) рднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рди рдХреЗрд╡рд▓ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдВрдЯреЗрдирд░, рдмрд▓реНрдХрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ: рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрдИ рддрдВрддреНрд░, рджреВрд░рд╕реНрде рдПрдХреНрд╕рдПрдкреА рдлрд╛рдЗрд▓реЗрдВ, .Net рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ред



рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП MEF рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП MEF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред



рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЕрдВрддрд░

Siverlight рдХреЗ рд▓рд┐рдП MEF рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
CompositionInitializer
рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ, MEF рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдВрдкреЛрдЬрд╝рд┐рдЯреНрдпреВрд▓реЗрдЯрд░рд╛рдЗрдЬрд╝рд░ рдХреНрд▓рд╛рд╕ (System.ComponentModel.CompositionInitialization.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдпрд╛рдд рдФрд░ рдЕрдиреНрдп рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХрд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред



рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ SatisfyImports()



рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рднреА SatisfyImports()



ред SatisfyImports



рд╡рд░реНрддрдорд╛рди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд╕рднреА рдЖрд╢реНрд░рд┐рдд рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдпрд╛рдиреА, рдкреВрд░реЗ XAP рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░) рдХреА SatisfyImports



рдХрд░рддрд╛ рд╣реИред рд░рдЪрдирд╛ рдХреЗ рджреМрд░рд╛рди рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╡рд╕реНрддреБрдПрдБ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рддрдм рддрдХ рд░рд╣реЗрдВрдЧреА рдЬрдм рддрдХ рдХрд┐ рдЕрдВрддрд┐рдо рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА, рдЕрд░реНрдерд╛рддреНред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдВрдд рддрдХред



рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
  1. SatisfyImports()



    рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА SatisfyImports()



    рдореЗрдВ [Export]



    рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ;
  2. рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  3. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди XAP рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public partial class Shell : UserControl<br>{<br> public MainPage()<br> {<br> ComposeContainer()<br> }<br><br> private void ComposeContainer()<br> {<br> CompositionInitializer.SatisfyImports( this );<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .



DeploymentCatalog
рдпрд╣ рд╡рд░реНрдЧ XAP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдХрд░рдиреЗ, рдореБрдЦреНрдп XAP рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдбрд╛рдЙрдирд▓реЛрдб рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдЖрджрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, XAP рдлрд╛рдЗрд▓реЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВред



рдпрд╣ рд╡рд░реНрдЧ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрдирд░реНрдорд┐рд▓рди (рдореМрдЬреВрджрд╛ рдФрд░ рдЬреЛрдбрд╝реЗ рдЧрдП рднрд╛рдЧреЛрдВ рдХреА рдкреБрди: рд░рдЪрдирд╛) рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЕрдЧрд░ рдРрд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВ рдЬреЛ рдкреБрдирд░реНрдорд┐рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред



DeploymentCatalog



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
  1. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛрддрд╛ рд╣реИ
  2. CompositionHost



    рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)
  3. рдпрджрд┐ рд╕рдорд╛рди рдЕрд╕реЗрдВрдмрд▓рд┐рдпрд╛рдБ рдЕрд▓рдЧ-рдЕрд▓рдЧ XAP рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ DeploymentCatalog



    рд▓реЗрдЦрди рдЙрди рд╕рднреА рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдкреВрд░рд╛ рдЖрд╡реЗрджрди рдХреА рдбреБрдкреНрд▓реАрдХреЗрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ CopyLocal=False



    рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ VS2010 XapsMinifier рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
  4. рдХреЗрд╡рд▓ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ XAP рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  5. рдЖрдЙрдЯ рдСрдл рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЛрдб рдореЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
private void CancelLoading()<br>{<br> catalog.CancelAsync();<br>}<br><br> private void LoadXapFile( string xapPath)<br>{<br> DeploymentCatalog catalog = new DeploymentCatalog(xapPath);<br> catalog.DownloadCompleted += new EventHandler<AsyncCompletedEventArgs>(DownloadCompleted);<br> catalog.DownloadProgressChanged += new EventHandler<DownloadProgressChangedEventArgs>(ProgressChanged);<br> catalog.DownloadAsync();<br> _aggregateCatalog.Catalogs.Add(catalog);<br>}<br><br> void DownloadCompleted( object sender, System.ComponentModel.AsyncCompletedEventArgs e)<br>{<br> if (e.Error != null )<br> throw e.Error;<br>}<br><br> void catalog_DownloadProgressChanged( object sender, DownloadProgressChangedEventArgs e)<br>{<br> int progress = e.ProgressPercentage;<br> long received = e.BytesReceived;<br> long total = e.TotalBytesToReceive;<br>} <br><br> * This source code was highlighted with Source Code Highlighter .



CompositionHost
рдпрд╣ рд╡рд░реНрдЧ рдЙрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреА рдХрдбрд╝реА рд╣реИ, рдЬрд┐рдирдореЗрдВ рднрд╛рдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдпрд╛рдд / рдЖрдпрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдФрд░ рдПрдХ рдХрдВрдЯреЗрдирд░ рдЬрд┐рд╕рдореЗрдВ рднрд╛рдЧреЛрдВ рдХреА рд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди XAP рдлрд╝рд╛рдЗрд▓ рд╕реЗ рднрд╛рдЧреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЬрд╛рдПрдЧреА рдФрд░, рдкрд░рд┐рд╡рд░реНрддрди (рдкрд░рд┐рд╡рд░реНрдзрди / рд╡рд┐рд▓реЛрдкрди) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореМрдЬреВрджрд╛ рднрд╛рдЧреЛрдВ рдХрд╛ рдПрдХ рдкреБрдирд░реНрдорд┐рд▓рди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред



рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public partial class Shell : UserControl<br>{<br> public MainPage()<br> {<br> ComposeContainer()<br> }<br><br> private void ComposeContainer()<br> {<br> _aggregateCatalog = new AggregateCatalog( new DeploymentCatalog());<br> CompositionHost.Initialize(_aggregateCatalog);<br> CompositionInitializer.SatisfyImports( this );<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .



ExportFactory <T>
рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ (рд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ) рдХреА рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ ExportFactory <T> рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдПрдХ рдЙрджрд╛рд╣рд░рдг:
[Export]<br> public class DocumentViewModel {<br><br> [Import] <br> public ExportFactory<IDocument> DocumentFactory<br> {<br> get ;<br> set ;<br> }<br><br> protected List <IDocument> Documents<br> {<br> get ;<br> set ;<br> }<br><br> public void CreateDocument() <br> {<br> Documents.Add(DocumentFactory.CreateExport().Value);<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .



ExportFactory <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдЪрдирд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрдирд╛рдХрд░, рдбреЗрд╡рд▓рдкрд░ рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдорд╛рдирдХ Dispose()



рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдПрдХ рдЙрджрд╛рд╣рд░рдг:
[Export]<br> public class DocumentViewModel : IDisposable <br>{<br> private bool isDisposed = false ;<br> [Import] <br> public ExportFactory<IDocument> DocumentFactory<br> {<br> get ;<br> set ;<br> }<br><br> private List <ExportLifetimeContext<IDocument>> ExportLifeTimeContextList<br> {<br> get ;<br> set ;<br> }<br><br> protected List <IDocument> Documents<br> {<br> get ;<br> set ;<br> }<br><br> public void CreateDocument() <br> {<br> ExportLifetimeContext<IDocument> LifeTimeContext = DocumentFactory.CreateExport();<br> ExportListLifeTimeContext.Add(LifeTimeContext);<br> Documents.Add(LifeTimeContext.Value);<br> }<br><br> public void Dispose()<br> {<br> Dispose( true );<br> GC.SuppressFinalize( this );<br> }<br><br> public void Dispose( bool disposing)<br> {<br> if (isDisposed)<br> return ;<br><br> if (disposing)<br> {<br> foreach (IDisposable d in ExportLifeTimeContextList)<br> d.Dispose();<br> }<br> <br> isDisposed = true ;<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .



рдкреБрдирд░реНрд╕рдВрд░рдЪрдирд╛ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ MEF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд╛рджрдЧреА рдФрд░ рд╢рдХреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдереАрдореНрд╕ рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪреБрдирд╛ред



рдЖрд╡реЗрджрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
  1. рд╕рдорд░реНрдерди рд╡рд┐рд╖рдп
  2. рдереАрдо рдХреЗ рд╕рд╛рде рдерд░реНрдб-рдкрд╛рд░реНрдЯреА XAP рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ
  3. XAP рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╖рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдкреБрдирд░реНрд╕рдВрд╕реНрдерд╛рдкрди)
  4. рдереАрдо рдХреА рдкрд╕рдВрдж рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдХрд╛ рд╕рдорд░реНрдерди
рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдУрд░ рд░реБрдЦ рдХрд┐рдпрд╛ рдЬреЛ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдХрдИ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдореИрдВ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд╕рд╛рде xaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред



рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдп рдПрдХ рдЕрд▓рдЧ рдПрдХреНрд╕рдПрдкреА рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдереАрдо рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



IThemeLoader



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╖рдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╖рдп рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИред



рдПрдХ рдЙрджрд╛рд╣рд░рдг:
[InheritedExport]<br> public interface IThemeLoader<br>{<br> string Name<br> {<br> get ;<br> }<br><br> IEnumerable <ResourceDictionary> Resources<br> {<br> get ;<br> }<br><br>}<br><br><br> public class ThemeLoader : ThemeLoaderBase<br>{<br><br> #region IThemeLoader Members<br><br> public override string Name<br> {<br> get <br> {<br> return "Accent" ;<br> }<br> }<br><br> public override IEnumerable <ResourceDictionary> Resources<br> {<br> get <br> {<br> yield return LoadResourceDictionary( "/SLandMEFdevcamp.AccentTheme;component/Style.xaml" );<br> }<br> }<br><br> #endregion <br> <br> /* <br> protected virtual ResourceDictionary LoadResourceDictionary(string uri) <br> { <br> return new ResourceDictionary <br> { <br> Source = new Uri(uri, UriKind.Relative) <br> }; <br> } <br> */ <br>}<br> <br> * This source code was highlighted with Source Code Highlighter .



InheritedExport



рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред



рддреГрддреАрдп-рдкрдХреНрд╖ XAP рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рддреГрддреАрдп-рдкрдХреНрд╖ XAP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ XAP рдлрд╝рд╛рдЗрд▓ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рд░реВрдк рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рд╛рд░рдВрдн рдмрдЯрди рд░рдЦрддрд╛ рд╣реВрдВред рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ DeploymentCabinet



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред



рдЬреИрд╕реЗ рд╣реА IThemeLoader



рд╣реБрдЖ рд╣реИ, IThemeLoader



рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реВрдЪреА IThemeLoader



рдЬрд╛рдПрдЧреА рдФрд░ рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╖рдпреЛрдВ рдХреА рдПрдХ рдирдИ рд╕реВрдЪреА UI рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред



рдПрдХ рдЙрджрд╛рд╣рд░рдг:
private AggregateCatalog _aggregateCatalog = null ;<br> private IEnumerable <IThemeLoader> themesLoaders;<br><br> private void ComposeContainer()<br>{<br> _aggregateCatalog = new AggregateCatalog( new DeploymentCatalog());<br> CompositionHost.Initialize(_aggregateCatalog);<br> CompositionInitializer.SatisfyImports( this );<br>}<br><br>[ImportMany(AllowRecomposition = true )]<br> public IEnumerable <IThemeLoader> ThemesLoaders<br>{<br> get <br> {<br> return themesLoaders;<br> }<br> set <br> {<br> themesLoaders = value ;<br> RaisePropertyChanged( "ThemesLoaders" );<br> }<br>}<br><br> private IThemeLoader theme;<br> public IThemeLoader Theme<br>{<br> get <br> {<br> return theme;<br> }<br> set <br> {<br> theme = value ;<br> LoadTheme( value );<br> RaisePropertyChanged( "Theme" );<br> }<br>}<br><br> private void LoadTheme(IThemeLoader themeLoader)<br>{<br> if (themeLoader.Resources == null || !themeLoader.Resources.Any())<br> return ;<br><br> App.Current.Resources.MergedDictionaries.Clear();<br><br> foreach ( var resourceDict in themeLoader.Resources)<br> App.Current.Resources.MergedDictionaries.Add(resourceDict);<br>}<br><br> private void Button_Click( object sender, System.Windows.RoutedEventArgs e)<br>{<br> DeploymentCatalog catalog = new DeploymentCatalog(XapUrlTextBox.Text);<br> catalog.DownloadAsync();<br><br> _aggregateCatalog.Catalogs.Add(catalog);<br>} <br><br> * This source code was highlighted with Source Code Highlighter .



рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдереАрдо рдХреЗ рд╕рд╛рде XAP рдлрд╛рдЗрд▓реЗрдВ рдореБрдЦреНрдп XAP рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рдкреВрд░реНрдг URL рдХреЗ рдмрд┐рдирд╛ XAP рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SLandMEFdevcamp.AccentTheme.xap, SLandMEFdevcamp.Win7Theme.xapред



рдЗрд╕ рдХреЛрдб рдХрд╛ рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдирд┐рд╖реНрдХрд░реНрд╖

рдПрдордИрдПрдл рдХреЗ рдкрд╛рд╕ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╛рдпрджреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди, рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬрдЧрд╣ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕рдореЗрдВ рд░рдЪрдирд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд┐ред



рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП MEF рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдФрд░ рднреА рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреНрд╖рдорддрд╛рдПрдВ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕реАрдзреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдЧрддрд┐рд╢реАрд▓ рдХрдиреЗрдХреНрд╢рди / рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдХрд╛рд░реНрдп рдореЙрдбреНрдпреВрд▓, рдЖрджрд┐ рдХреЗ рд╡рд┐рдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб

рд╕реЛрд░реНрд╕ рдХреЛрдб рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рдЕрджреНрдпрддрди: ExportFactory<T>



рд╡рд░реНрдЧ рдХреЛ MEF 2 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг ExportFactory<T>



рдЬреЛрдбрд╝рд╛ ExportFactory<T>



ред



All Articles