рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдСрдЯреЛрдлрд╛рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдорд╡реАрд╕реА 3 рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди

рд╡рд░реНрддрдорд╛рди рдореЗрдВ MVC3Framework рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЖрд╡реЗрджрди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ DI рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рдСрдЯреЛрдлреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдСрдЯреЛрдлреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдСрдЯреЛрдлреИрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ NuGet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдХрдВрд╕реЛрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ:
PM> Install-Package Autofac рдСрдЯреЛрдлрд╛рдХ рд╕реНрд╡рдпрдВ PM> Install-Package Autofac рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
PM> Install-Package Autofac.Mvc3 рдФрд░ рдПрдордПрдХреНрд╕ 3 рдХреЗ рд▓рд┐рдП рдРрдб-рдСрди

рдЖрдк NuGet рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмрд╕ рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ рдСрдЯреЛрдлрд╛рдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ, рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдмреЗрд╕рд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

 protected void Application_Start() { Trace.TraceInformation("Website initialization started"); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); // Setup IoC container var builder = new ContainerBuilder(); builder.RegisterModule(new ServicesModule()); builder.Register(c => new Entities()).As<IEntities>() .OnActivated(e => { var config = DependencyResolver.Current.GetService<IGlobalSettings>(); e.Instance.RawConnectionString = config.Data.SqlServerConnectionString; }).InstancePerHttpRequest(); builder.RegisterType<LocalizationContext>().PropertiesAutowired().InstancePerHttpRequest(); builder.Register(c => new DefaultGlobalSettings()).As<IGlobalSettings>().SingleInstance(); builder.RegisterGeneric(typeof(MongoRepository<>)) .As(typeof(IMongoRepository<>)).InstancePerHttpRequest(); builder.Register(c => EnvironmentContext()).As<IEnvironmentContext>().InstancePerHttpRequest(); builder.RegisterModule(new AutofacWebTypesModule()); builder.RegisterSource(new ViewRegistrationSource()); builder.RegisterModelBinders(Assembly.GetExecutingAssembly()); builder.RegisterModelBinderProvider(); builder.RegisterFilterProvider(); IContainer container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); Trace.TraceInformation("Website has been successfully initialized"); } 


рдЕрдм рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖред
рдСрдЯреЛрдлреЗрдХ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рд╢реБрд░реБрдЖрддреА рдХрдХреНрд╖рд╛рдУрдВ (рдЖрдВрддрд░рд┐рдХ рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ) рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ ServicesModule рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдФрд░ DI рдХреЗ рд╕рднреА рд╡рд┐рд▓рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
  builder.RegisterModule(new ServicesModule()); 

рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  builder.Register(c => EnvironmentContext()).As<IEnvironmentContext>().InstancePerHttpRequest() 

рдЕрдирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рддред
  builder.Register(c => new Entities()).As<IEntities>() .OnActivated(e => { var config = DependencyResolver.Current.GetService<IGlobalSettings>(); e.Instance.RawConnectionString = config.Data.SqlServerConnectionString; }).InstancePerHttpRequest(); 

рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  builder.Register(c => new DefaultGlobalSettings()).As<IGlobalSettings>().InstancePerHttpRequest(); 

рд╕рд╛рдорд╛рдиреНрдп рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
  builder.RegisterGeneric(typeof(MongoRepository<>)) .As(typeof(IMongoRepository<>)).InstancePerHttpRequest(); 

рдХрдХреНрд╖рд╛ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ DI рд╕рдВрдкрддреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  builder.RegisterType<LocalizationContext>().PropertiesAutowired().InstancePerHttpRequest(); 

рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  builder.Register(c => new LocalizationContext { GlobalSettings = c.Resolve<IGlobalSettings>() }); 

рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг HttpContextBase, HttpRequestBase, HttpResponseBase, HttpServerUtilityBase, HttpSessionStateBase, HttpApplicationStateBase, HttpBrowserCapabilitiesBase, HttpBacheser.ache
  builder.RegisterModule(new AutofacWebTypesModule()); 

Autofac рднреА ModelBinder рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  builder.RegisterModelBinders(Assembly.GetExecutingAssembly()); builder.RegisterModelBinderProvider(); 

рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди (рдПрдХреНрд╢рдирдлрд╝рд┐рд▓реНрдЯрд░ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрдХреНрд╖рд╛рдПрдВ) рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрддреА рд╣реИрдВ:
  builder.RegisterFilterProvider(); 

рджреГрд╢реНрдп рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рдЕрдЧрд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ рд╣реЛрддрд╛ рд╣реИред
  builder.RegisterSource(new ViewRegistrationSource()); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдХреЛрдб рд╣реИ:
.InstancePerD тАЛтАЛрдирд┐рд░реНрднрд░рддрд╛ () - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИред
.InstancePerHttpRequest () -рдПрдХ рдЙрджрд╛рд╣рд░рдг HttpRequest рдкрд░
.SingleInstance () - рд╡рд░реНрдЧ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред
.InstancePerLifetimeScope () - рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рд╕реНрдХреЛрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ:
 using (var lifetime = container.BeginLifetimeScope()) { var component = lifetime.Resolve<SomeComponent>(); // component, and any of its disposable dependencies, will // be disposed of when the using block completes } 

рдХрдВрдЯреЗрдирд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  IContainer container = builder.Build(); 

рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ
  DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 


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

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


All Articles