ASP.NET рдкрд░ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдоред рдпрд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдЯ, mademoiselle рдФрд░ рд╡рд░реАрдпрддрд╛

рдЫрд╡рд┐

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдЧреНрд░рджреВрдд


рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдпрд╣ рд▓реЗрдЦ рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЗрд╡рд▓ рд╕рд╣реА рдФрд░ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк, рдкреНрд░рд┐рдп $ habrauser $, рдЗрд╕ рддрд░рд╣ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП


рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдмрдпрд╛рди


рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдЪрд╛рд░ рдмрдбрд╝реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рдХрдо рд╕реЗ рдХрдо 2 рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдмрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 2 рднрд╛рдЧ рдереЗ, рд╕рдорд░реНрдерди рддрдирд╛рд╡рдкреВрд░реНрдг рдирд╣реАрдВ рдерд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИред рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд╢рд╛рд▓ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдмрдврд╝реА рдФрд░ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдХрд╛рдо рд╣реЛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдЗрд╕ рдкреВрд░реЗ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ ASP.NET MVC рдЗрдВрдЯреНрд░рд╛рдиреЗрдЯ рд╕рд╛рдЗрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдХрдВрдкрдиреА рдХреЗ рдХрд░реНрдордЪрд╛рд░реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рдордп рдХреЗ рд╕рд╛рде, рдкрд╛рдВрдЪ рд╕реЗ рд╕рд╛рдд рд╡рд┐рдЪрд╛рд░ рдФрд░ рджреЛ рд╕реЗ рддреАрди рдирд┐рдпрдВрддреНрд░рдХ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдвреЗрд░ рдореЗрдВ рдмрдврд╝ рдЧрдП, рдЬрд┐рд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред

рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреАред рддреБрд░рдВрдд рдХреНрд╖реЗрддреНрд░реЛрдВ (рдХреНрд╖реЗрддреНрд░реЛрдВ) рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рддреБрд░рдВрдд рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдФрд░ рднреА рдЫреЛрдЯреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рдереАред рд╕рднреА "рдорд╛рдирдХ" рд╕рдорд╛рдзрд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рднреА рдореБрдЭреЗ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реЛред
рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рдерд╛ред рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧ-рдЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдирд╛ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд░реВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдкреНрд▓рдЧрдЗрди рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдПрдХ рд▓рдВрдмреА рдЧреБрдЧрд▓реА рдФрд░ рдЦреЛрдЬреЛрдВ рдХреЗ рджреМрд░рд╛рди, рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╡рд░реНрдгрди рдорд┐рд▓рд╛ред рд▓реЗрдЦрдХ рдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрдВрджрд░ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣рд░ рдЪреАрдЬ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рджреЗрдЦрд╛ред рджрд░рдЕрд╕рд▓, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ рдФрд░ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ" (рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдореИрдВ рд╕рд╛рдЗрдЯ рдкрд░ рдХреНрдпреЛрдВ рд▓рд┐рдЦреВрдВрдЧрд╛)ред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди ... рдпрд╣рд╛рдВ рдмреНрдпреВрдЯ рдЙрдареА, рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред рдкреНрд▓рдЧ-рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреЛрд╕реНрдЯ-рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ (рдХреНрд╖реЗрддреНрд░реЛрдВ) рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдмрдбрд╝рд╛ рдЕрдЯрдкрдЯрд╛ рдерд╛ред рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬреИрд╕реЗ "рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдоред" рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЦреЛрдЬ рдЬрд╛рд░реА рд░рдЦреАред рдФрд░, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдпрд╣ рдЦреЛрдЬ рд╕рдлрд▓ рд░рд╣реАред

рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрдЦреНрдпрд╛ рджреЛ

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

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Visual Studio рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ MVC 4 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, MVC рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рд╣рдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╣рддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдкреНрд▓рдЧрдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХреЛрдб рд╕рд░рд▓ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред
IModule
namespace EkzoPlugin.Infrastructure { public interface IModule { /// <summary> /// ,      /// </summary> string Title { get; } /// <summary> ///    /// </summary> string Name { get; } /// <summary> ///   /// </summary> Version Version { get; } /// <summary> ///  ,     /// </summary> string EntryControllerName { get; } } } 


рдЕрдм рд╣рдо Class Library рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕реЗ PluginManager рдХрд╣реЗрдВрдЧреЗред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдзрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рд╣реЛрдВрдЧреЗред
рдПрдХ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ:
PluginManager
 namespace EkzoPlugin.PluginManager { public class PluginManager { public PluginManager() { Modules = new Dictionary<IModule, Assembly>(); } private static PluginManager _current; public static PluginManager Current { get { return _current ?? (_current = new PluginManager()); } } internal Dictionary<IModule, Assembly> Modules { get; set; } //    public IEnumerable<IModule> GetModules() { return Modules.Select(m => m.Key).ToList(); } //    public IModule GetModule(string name) { return GetModules().Where(m => m.Name == name).FirstOrDefault(); } } } 


рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░реЗрдЧрд╛ред

рдЕрдм рдПрдХ рдирдИ рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ PreApplicationInit рдирд╛рдо рджреЗрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЬрд╛рджреВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ред PreApplicationStartMethod рд╡рд┐рд╢реЗрд╖рддрд╛ "рдЬрд╛рджреВ" рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рдЬрдм рдпрд╣ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рдереА, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдкрд╣рд▓реЗ рднреА Application_Start рдХреА рддреБрд▓рдирд╛ рдореЗрдВред рдпрд╣ рд╣рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
PreApplicationInit
 [assembly: PreApplicationStartMethod(typeof(EkzoPlugin.PluginManager.PreApplicationInit), "InitializePlugins")] namespace EkzoPlugin.PluginManager { public class PreApplicationInit { static PreApplicationInit() { //      string pluginsPath = HostingEnvironment.MapPath("~/plugins"); //    ,     string pluginsTempPath = HostingEnvironment.MapPath("~/plugins/temp"); //    ,   if (pluginsPath == null || pluginsTempPath == null) throw new DirectoryNotFoundException("plugins"); PluginFolder = new DirectoryInfo(pluginsPath); TempPluginFolder = new DirectoryInfo(pluginsTempPath); } /// <summary> ///        /// </summary> /// <remarks> ///          /// </remarks> private static readonly DirectoryInfo PluginFolder; /// <summary> ///       ///    ,        /// </summary> private static readonly DirectoryInfo TempPluginFolder; /// <summary> /// Initialize method that registers all plugins /// </summary> public static void InitializePlugins() { Directory.CreateDirectory(TempPluginFolder.FullName); //     foreach (var f in TempPluginFolder.GetFiles("*.dll", SearchOption.AllDirectories)) { try { f.Delete(); } catch (Exception) { } } //  foreach (var plug in PluginFolder.GetFiles("*.dll", SearchOption.AllDirectories)) { try { var di = Directory.CreateDirectory(TempPluginFolder.FullName); File.Copy(plug.FullName, Path.Combine(di.FullName, plug.Name), true); } catch (Exception) { } } // *     'Load' //      'probing'   web.config // : <probing privatePath="plugins/temp" /> var assemblies = TempPluginFolder.GetFiles("*.dll", SearchOption.AllDirectories) .Select(x => AssemblyName.GetAssemblyName(x.FullName)) .Select(x => Assembly.Load(x.FullName)); foreach (var assembly in assemblies) { Type type = assembly.GetTypes().Where(t => t.GetInterface(typeof(IModule).Name) != null).FirstOrDefault(); if (type != null) { //      BuildManager.AddReferencedAssembly(assembly); //       var module = (IModule)Activator.CreateInstance(type); PluginManager.Current.Modules.Add(module, assembly); } } } } } 


рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА рд╣реИ рдЬреЛ рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ , рдЬреЛ рдмрд┐рд▓реНрдЯ-рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 namespace EkzoPlugin.PluginManager { public static class PluginBootstrapper { public static void Initialize() { foreach (var asmbl in PluginManager.Current.Modules.Values) { BoC.Web.Mvc.PrecompiledViews.ApplicationPartRegistry.Register(asmbl); } } } } 


рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдм рдЖрдк рд╣рдорд╛рд░реЗ рдмреЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо web.config рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд░рдирдЯрд╛рдЗрдо рд╕реЗрдХреНрд╢рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
  <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="plugins/temp" /> 

рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдЕрдм рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП EkzoPlugin.PluginManager рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдВрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рдЕрдм Global.asax рдЦреЛрд▓реЗрдВ рдФрд░ рд╕рд┐рд░реНрдл рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо EkzoPlugin.PluginManager рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рдЬреБрдбрд╝реЗрдВрдЧреЗ
 using EkzoPlugin.PluginManager; 

рдФрд░ Applicationaton_Start () рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреВрд╕рд░реА рдЬреЛрдбрд╝реЗрдВ
  protected void ApplicationStart() { PluginBootstrapper.Initialize(); 

рдпрд╣рд╛рдВ рдореИрдВ рдереЛрдбрд╝рд╛ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред PreApplicationInit рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛рдж рд░рдЦреЗрдВ? рдЗрд╕рд▓рд┐рдП, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ ApplicationStart рдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдкреНрд▓рдЧрдЗрди рдореИрдиреЗрдЬрд░ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдЬрдм ApplicationStart рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓рд╛, рддреЛ рд╣рдо рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкрддрд╛ рд╣реЛ рдХрд┐ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╡рд╣ рд╕рдм рд╣реИред рд╣рдорд╛рд░рд╛ рдореВрд▓ рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦрди


рдЪрд▓рд┐рдП рдЕрдм рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рдЖрдзрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рд╕реНрдерд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреНрд▓рдЧрдЗрди рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдЦреНрдд рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВ)ред рдпрд╣ рд╡рд╣ рдХреАрдордд рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪреБрдХрд╛рдиреА рд╣реЛрдЧреАред
рд╣рдо рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдорд╡реАрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓реЗрддреЗ рд╣реИрдВред рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВред рдЪрд▓реЛ рдЗрд╕реЗ SampleMvcController рдХрд╣рддреЗ рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Visual Studio рдПрдХрд▓ рдЗрдВрдбреЗрдХреНрд╕ () рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдЬреЛрдбрд╝реЗрдВред
рджреГрд╢реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ рдФрд░ рдХреБрдЫ рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
 <h3>Sample Mvc Plugin</h3> 

рдЕрдм Visual Studio Add-ons рдкреНрд░рдмрдВрдзрдХ рдЦреЛрд▓реЗрдВ рдФрд░ RazorGenerator рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдкрдХреЛ рд╕рдВрдХрд▓рд┐рдд dll рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреГрд╢реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ index.cshtml рджреГрд╢реНрдп рдЪреБрдиреЗрдВ рдФрд░ рдЧреБрдг рд╡рд┐рдВрдбреЛ рдореЗрдВ рдирд┐рдореНрди рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ:
рдПрдХреНрд╢рди рдмрдирд╛рдПрдБ: рдПрдВрдмреЗрдбреЗрдбред рд╕реЛрд░реНрд╕
рдХрд╕реНрдЯрдо рдЯреВрд▓: рд░реЗрдЬрд░рдЧреЗрдВрд╕рд░
рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдВрдХрд▓рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рджреГрд╢реНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИрдВред
рд╣рдо рд▓рдЧрднрдЧ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рднреА рджреЛ рд╕рд░рд▓ рдХрджрдо рдЙрдард╛рдиреЗ рд╣реЛрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП EkzoPlugin.Infrastructure рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдкреНрд▓рдЧрдЗрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдирдореВрдирд╛рдПрдорд╡реАрд╡реАрдореЛрдбреБрд▓реЗ.рдХрд▓реНрд╕
SampleMVCModule
 using EkzoPlugin.Infrastructure; namespace EkzoPlugin.Plugins.SampleMVC { public class SampleMVCModule : IModule { public string Title { get { return "SampleMVCPlugin"; } } public string Name { get { return Assembly.GetAssembly(GetType()).GetName().Name; } } public Version Version { get { return new Version(1, 0, 0, 0); } } public string EntryControllerName { get { return "SampleMVC"; } } } } 


рд╡рд╣ рд╕рдм рд╣реИред рдкреНрд▓рдЧрдЗрди рддреИрдпрд╛рд░ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ рд╣реИ?
рдЕрдм рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдЖрдзрд╛рд░ рд╕рд╛рдЗрдЯ рдХреЗ рдкреНрд▓рдЧ рдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред
рдЖрдзрд╛рд░ рд╕рд╛рдЗрдЯ рдХреЗ _Layout.cshtml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ
 @using EkzoPlugin.Infrastructure @using EkzoPlugin.PluginManager @{ IEnumerable<IModule> modules = PluginManager.Current.GetModules(); Func<string, IModule> getModule = name => PluginManager.Current.GetModule(name); } <html ...... <head>....</head> <body> <ul id="pluginsNavigation"> <li class="MenuItem">@Html.ActionLink("Home","Index","Home",null,null)</li> @foreach (IModule module in modules) { <li class="MenuItem">@Html.ActionLink(module.Title, "Index", module.EntryControllerName)</li> } </ul> ... </body> </html> 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдЗрд╕рд▓рд┐рдП ASP.NET MVC рдкрд░ рдкреНрд▓рдЧрдЗрди рд╕рд╛рдЗрдЯ рддреИрдпрд╛рд░ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рд╡рд╣ рдЕрдкрдиреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд▓рдЧ-рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдкреЛрд╕реНрдЯ-рд╕рдВрдХрд▓рди рдЯреАрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдзрд╛рд░ рд╕рд╛рдЗрдЯ рдХреЗ рдкреНрд▓рдЧ-рдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрд╡рдпрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдЧрд╛ред
рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХрд╛рдлреА рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд▓рдЧрдЗрди рдЖрдзрд╛рд░ рд╕рд╛рдЗрдЯ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдкреНрд▓рдЧ-рдЗрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕реНрдЯреЗрдЬ рдкрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реА рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрдЪрд┐рдд рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдбрд╛рд▓рдирд╛ рди рднреВрд▓реЗрдВ (рдпрд╣ рд╕реНрдЯрд╛рдЗрд▓, рдЗрдореЗрдЬ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рднреА рд╕рд╣реА рд╣реИ)ред
рджреВрд╕рд░реЗ, рдХрдиреЗрдХреНрдЯреЗрдб рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмреЗрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрдВрдмрд▓реА рдирд╣реАрдВ рдорд┐рд▓реАред
рддреАрд╕рд░рд╛, рдЖрдкрдХрд╛ рдкреНрд▓рдЧрдЗрди рдЖрдзрд╛рд░ рд╕рд╛рдЗрдЯ рдХреА web.config рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдкреНрд▓рдЧ рдЗрди рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рдПрдХ рдЕрдиреНрдп рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдкреА рдХрд╛ рд╣реЛрдЧрд╛ред

рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдпреЛрдЬрдирд╛ - рд▓рд┐рдВрдХ
рдореЗрдЯреНрд░реЛрдпреВрдЖрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ - рд▓рд┐рдВрдХ

Source: https://habr.com/ru/post/In202776/


All Articles