MEF рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдврд╛рдВрдЪрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ (рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди) рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝ / рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЕрдореВрд░реНрдд рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдЦрдВрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЖрджрд┐ред
рдПрдордИрдПрдл рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрджрд╛рд╣рд░рдг рдХрдВрд╕реЛрд▓ рдпрд╛ WPF рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рднрд╛рдЧреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред MEF рдЦреБрдж рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреЗрдЬ рдмрдирд╛рдиреЗ, рдирд┐рдпрдВрддреНрд░рдг рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ Asp.net рд░рдирдЯрд╛рдЗрдо рд╕рдм рдХреБрдЫ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП MEF рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдЯреВрд▓ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреНрдЮрд╛рдд рд╕рдорд╛рдзрд╛рди
рдПрдХ рдЙрдкрд╛рдп рд╣реИ рдХрд┐ MEF рдХрд╛ рдЙрдкрдпреЛрдЧ WebForms рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреА рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛рдПрдБ рд╣реИрдВред
- рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ, рдкреГрд╖реНрдареЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
- рдпрд╣ рдЙрджрд╛рд╣рд░рдг
HttpModule
рдФрд░ HttpHandler
рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдордИрдПрдл рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░
HttpModule
рдФрд░
HttpHandler
рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рджреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ - рд╕реНрдерд╛рдиреАрдп (рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз) рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХред
рдЬрдм рднреА рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдЖрддрд╛ рд╣реИ, asp.net рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрд░реЛрдзрд┐рдд рдкреГрд╖реНрда рдпрд╛ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдирд┐рд░реНрднрд░ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреЗрдЬ рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрдпрд╛рддрд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛, рдФрд░ рд╕рднреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рдЗрдВрдкреЛрд░реНрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реЗрд╡ рдХрд░рдирд╛ред

рджреВрд╕рд░реА рдУрд░,
HttpModule
рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛
HttpModule
ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рднреА
HttpModule
рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдкреЗрдЬ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг
рдкреГрд╖реНрда рдФрд░ рдЙрд╕рдХреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд
HttpModule
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдзрд┐рдд рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП
Pre_Init
рдФрд░
Init
рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдкреЗрдЬ, рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд░рдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
Init
рдИрд╡реЗрдВрдЯ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдЬрд╝рд┐рд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐
Pre_Init
рдкрд░ рд╡реЗ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:public class ComposeContainerHttpModule : IHttpModule<br>{<br> public void Init(HttpApplication context)<br> {<br> context.PreRequestHandlerExecute += ContextPreRequestHandlerExecute;<br> }<br><br> private void ContextPreRequestHandlerExecute( object sender, EventArgs e)<br> {<br> Page page = HttpContext .Current.CurrentHandler as Page ;<br> if (page != null )<br> {<br> page.PreInit += Page_PreInit;<br> page.Init += Page_Init;<br> }<br> }<br><br> private void Page_Init( object sender, EventArgs e)<br> {<br> Page handler = sender as Page ;<br><br> if (handler != null )<br> {<br> CompositionBatch batch = new CompositionBatch();<br> batch = ComposeWebPartsUtils.BuildUpControls(batch, handler.Controls);<br> ContextualCompositionHost.Container.Compose(batch);<br> }<br> }<br><br> private void Page_PreInit( object sender, EventArgs e)<br> {<br> Page handler = sender as Page ;<br><br> if (handler != null )<br> {<br> CompositionBatch batch = new CompositionBatch();<br> batch = ComposeWebPartsUtils.BuildUp(batch, handler);<br> batch = ComposeWebPartsUtils.BuildUpUserControls(batch, handler.Controls);<br> batch = ComposeWebPartsUtils.BuildUpMaster(batch, handler.Master);<br> ContextualCompositionHost.Container.Compose(batch);<br> }<br> }<br><br> public void Dispose()<br> {<br> }<br>}<br> <br> * This source code was highlighted with Source Code Highlighter .
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЖрдпрд╛рдд рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП, рдФрд░ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ, рд╕рд░реНрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдЙрдирдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдп рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
BuildUp(CompositionBatch batch, Object o)
рд╡рд┐рдзрд┐ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛
Object o
рдХреЛрдИ рдЖрдпрд╛рддрд┐рдд рдЖрдЗрдЯрдо рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрдЯреЗрдирд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ComposBatch рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рдЖрдпрд╛рдд рдЖрд░рдВрдн рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬреАрд╡рди рднрд░ рдЙрдкрд▓рдмреНрдз рд░рд╣реЗрдВрдЧреЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:public static class ComposeWebPartsUtils<br>{<br> public static CompositionBatch BuildUp(CompositionBatch batch, Object o)<br> {<br> ComposablePart part = AttributedModelServices.CreatePart(o);<br><br> if (part.ImportDefinitions.Any())<br> {<br> if (part.ExportDefinitions.Any())<br> throw new Exception( string .Format( "'{0}': Handlers cannot be exportable" , o.GetType().FullName));<br><br> batch.AddPart(part);<br> }<br><br> return batch;<br> }<br><br> public static CompositionBatch BuildUpUserControls(CompositionBatch batch, ControlCollection controls)<br> {<br> foreach (Control c in controls)<br> {<br> if (c is UserControl)<br> batch = ComposeWebPartsUtils.BuildUp(batch, c);<br> batch = BuildUpUserControls(batch, c.Controls);<br> }<br><br> return batch;<br> }<br><br> public static CompositionBatch BuildUpControls(CompositionBatch batch, ControlCollection controls)<br> {<br> foreach (Control c in controls)<br> {<br> batch = ComposeWebPartsUtils.BuildUp(batch, c);<br> batch = BuildUpControls(batch, c.Controls);<br> }<br><br> return batch;<br> }<br><br> public static CompositionBatch BuildUpMaster(CompositionBatch batch, MasterPage master)<br> {<br> if (master != null )<br> batch = BuildUpMaster(ComposeWebPartsUtils.BuildUp(batch, master), master.Master);<br><br> return batch;<br> }<br>}<br> <br> * This source code was highlighted with Source Code Highlighter .
рдиреЛрдЯ:рдореИрдВ рдЙрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
PageHandlerFactory
рд╕рд╛рдЗрдЯ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
PageHandlerFactory
рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ
PageHandlerFactory
рдФрд░
GetHandler()
рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐) рдЗрд╕ рд╕рдордп рддрдХ, рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
HttpHandler
рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рдШрдЯрдирд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╕рднреА рдЖрдпрд╛рдд рд╕рдВрддреБрд╖реНрдЯ рд╣реЛ рд╕рдХреЗрдВред рдЙрдкрдпреБрдХреНрдд
HandlerFactory
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░
HandlerFactory
GetHandler()
рдкрджреНрдзрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛
HandlerFactory
рдХрд┐
HandlerFactory
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдРрд╕рд╛ рд╡рд░реНрдЧ рдореМрдЬреВрдж рд╣реИ (
SimpleWebHandlerFactory
), рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ Microsoft рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдиреЗ рдРрд╕рд╛ рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░рдЦрд╛рдиреЗ
SimpleWebHandlerFactory
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп
SimpleWebHandlerFactory
рдврд╛рдВрдЪреЗ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рдХрд┐рд╕реА рднреА
HandlerFactory
рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
HandlerFactory
рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ Parser рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ
HttpHandler
рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХреЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рдкрд╛рд░реНрд╕рд░ рдореМрдЬреВрдж рд╣реИ (
SimpleWebHandlerParser
), рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (
WebHandlerParser
)ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рд╣реИ рдЬреЛ
HttpHandler
рд▓рд┐рдП рдПрдХ рд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ

рдиреАрдЪреЗ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
public class SimpleWebHandlerFactory : IHttpHandlerFactory<br>{<br> public virtual IHttpHandler GetHandler( HttpContext context, string requestType, string virtualPath, string path)<br> {<br> Type type = WebHandlerParser.GetCompiledType(context, virtualPath, path);<br> if (!( typeof (IHttpHandler).IsAssignableFrom(type)))<br> throw new HttpException( "Type does not implement IHttpHandler: " + type.FullName);<br><br> return Activator.CreateInstance(type) as IHttpHandler;<br> }<br><br> public virtual void ReleaseHandler(IHttpHandler handler)<br> {<br> }<br>}<br><br> internal class WebHandlerParser : SimpleWebHandlerParser<br>{<br> internal WebHandlerParser( HttpContext context, string virtualPath, string physicalPath)<br> : base (context, virtualPath, physicalPath)<br> {<br> }<br><br> public static Type GetCompiledType( HttpContext context, string virtualPath, string physicalPath)<br> {<br> WebHandlerParser parser = new WebHandlerParser(context, virtualPath, physicalPath);<br> Type type = parser.GetCompiledTypeFromCache();<br> if (type != null )<br> return type;<br> else <br> throw new HttpException( string .Format( "File '{0}' is not a web handler." , virtualPath));<br> }<br> <br> protected override string DefaultDirectiveName<br> {<br> get <br> {<br> return "webhandler" ;<br> }<br> }<br>}<br><br> public class ComposableWebHandlerFactory : SimpleWebHandlerFactory<br>{<br> public override IHttpHandler GetHandler( HttpContext context, string requestType, string virtualPath, string path)<br> {<br> IHttpHandler handler = base .GetHandler(context, requestType, virtualPath, path);<br><br> if (handler != null )<br> {<br> CompositionBatch batch = new CompositionBatch();<br> batch = ComposeWebPartsUtils.BuildUp(batch, handler);<br> ContextualCompositionHost.Container.Compose(batch);<br> }<br><br> return handler;<br> }<br>}<br> <br> * This source code was highlighted with Source Code Highlighter .
HttpModule
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рднреА
HttpModules
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореБрдЭреЗ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд░рдЪрдирд╛ рдХреЛ рд╕рд╣реА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:public class ScopedContainerHttpModule : IHttpModule<br>{<br> private CompositionContainer _container;<br><br> public void Init(HttpApplication app)<br> {<br> ComposeModules(app);<br> }<br><br> private void ComposeModules(HttpApplication app)<br> {<br> CompositionBatch batch = ComposeWebPartsUtils.BuildUpModules(app);<br> _container.Compose(batch);<br> }<br>}<br><br> public static class ComposeWebPartsUtils<br>{<br> public static CompositionBatch BuildUpModules(HttpApplication app)<br> {<br> CompositionBatch batch = new CompositionBatch();<br><br> for ( int i = 0; i < app.Modules.Count - 1; i++)<br> batch = BuildUp(batch, app.Modules.Get(i));<br><br> return batch;<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .
рдореБрдЭреЗ рдПрдХ
HttpApplication
рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ,
HttpApplication
рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рднрд░рддрд╛ рд╣реВрдВред
рдирддреАрдЬрддрди, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА WebForms рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ web.config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░реЗред
< httpHandlers > <br> ......<br> < remove path ="*.ashx" verb ="*" /> <br> < add path ="*.ashx" verb ="*" type ="common.composition.WebExtensions.ComposableWebHandlerFactory, common.composition" /> <br> ......<br> </ httpHandlers > <br> < httpModules > <br> < add name ="ContainerCreator" type ="common.composition.WebExtensions.ScopedContainerHttpModule, common.composition" /> <br> ......<br> < add name ="ComposeContainerModule" type ="common.composition.WebExtensions.ComposeContainerHttpModule, common.composition" /> <br> </ httpModules > <br><br> * This source code was highlighted with Source Code Highlighter .
рдореИрдВ * .ashx рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдореЗрд░рд╛ (
ComposableWebHandlerFactory
) рдЬреЛрдбрд╝реЗрдВред
рдореИрдВ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
ContainerCreator
рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред
ComposeContainerModule
рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдиреАрдп рдХрдВрдЯреЗрдирд░ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд╣ рд╕рдм рд╣реИ!
рдореБрдЭреЗ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦреЗрдВред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╡реЗрдм рд░реВрдкреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднреА рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ web.config рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рдкреНрд░рд╕реНрддреБрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВред
рдЙрджрд╛рд╣рд░рдг
рдореИрдВ рдПрдХ рдбреЗрдореЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдорд╛рдореВрд▓реА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде
WebFomsAndMef рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдерд╛ред
рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрддреНрд╡
[PartCreationPolicy(CreationPolicy.NonShared)]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде
SampleCompositionPart
рд╡рд░реНрдЧ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐
SampleCompositionPart
рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдпрд╛рдд рдЕрдзрд┐рдирд┐рдпрдо
SampleCompositionPart
рджреМрд░рд╛рди
SampleCompositionPart
рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдПрдХрд▓
Id
рдлрд╝реАрд▓реНрдб рд╣реИ рдЬреЛ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рджреЗрддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЧрд╛рдЗрдб рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдкреГрд╖реНрда, рдирд┐рдпрдВрддреНрд░рдг, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг, рдкреЗрдЬ рдорд╛рд╕реНрдЯрд░
HttpHandler
рдФрд░
HttpModule
ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:///PageSample.aspx <br><asp:Content ID= "BodyContent" runat= "server" ContentPlaceHolderID= "MainContent" ><br> <% =SamplePart.Id %><br></asp:Content><br> <br> ///PageSample.cs <br> public partial class PageSample : System.Web.UI. Page <br>{<br> [Import]<br> public SampleCompositionPart SamplePart<br> {<br> get ;<br> set ;<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .

рд╕реЛрд░реНрд╕ рдХреЛрдб
рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ asp.net WebForms рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ MEF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред