рд╕рдмрдХ рдЙрджреНрджреЗрд╢реНрдп : рд▓рд░реНрдирд┐рдВрдЧ рдбрд┐ (рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди)ред Ninject, Unity, Autofac, рдФрд░ Winsor рдкрд░ рдЙрджрд╛рд╣рд░рдгред
рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╣реА рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪреВрдБрдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдПрдХреНрд╕реЗрд╕ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реАрдзреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдм рдЙрджрд╛рд╣рд░рдг рджреЛрдиреЛрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рдо рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд┐рд░реНрдорд╛рдг рддрд░реНрдХ рд╕реМрдВрдкрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЖрдЗрдП рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдХрд┐рд▓ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде IWeapon рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдХреНрд╖рд╛рдПрдВ Bazuka рдФрд░ Sword, рдФрд░ рд╡рд╛рд░рд┐рдпрд░ рд╡рд░реНрдЧ, рдЬреЛ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
public interface IWeapon { void Kill(); } public class Bazuka : IWeapon { public void Kill() { Console.WriteLine("BIG BADABUM!"); } } public class Sword : IWeapon { public void Kill() { Console.WriteLine("Chuk-chuck"); } } public class Warrior { readonly IWeapon Weapon; public Warrior(IWeapon weapon) { this.Weapon = weapon; } public void Kill() { Weapon.Kill(); } } 
рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
  class Program { static void Main(string[] args) { Warrior warrior = new Warrior(new Bazuka()); warrior.Kill(); Console.ReadLine(); } } 
рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рдкрдврд╝рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдпреЛрджреНрдзрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдПрдХ рдмрд╛рдЬреБрдХрд╛ рджреЗрддреЗ рд╣реИрдВ, рд╡рд╣ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдорд╛рд░рддрд╛ рд╣реИред рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
 BIG BADABUM! 
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рдЕрд╢рдХреНрдд рдЪреЗрдХ рдирд╣реАрдВ рд╣реИ
 Weapon.Kill(); 
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдпреЛрджреНрдзрд╛ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╣рдерд┐рдпрд╛рд░ рд╣реИ, рдФрд░ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдирд╛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред
DI рдХрд╛ рд╕рд╛рд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрдирд╛ рд╣реИред
рд╣рдо Ninject рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
 Install-Package Ninject 
рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
  public class WeaponNinjectModule : NinjectModule { public override void Load() { this.Bind<IWeapon>().To<Sword>(); } } 
рдЬрд┐рд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рд╣реИ: "рдпрджрд┐ рд╡реЗ рд╣рдерд┐рдпрд╛рд░ рдорд╛рдВрдЧрддреЗ рд╣реИрдВ, рддреЛ рддрд▓рд╡рд╛рд░реЗрдВ рджреЗ рджреЗрдВред"
рд╣рдо рдПрдХ "рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░" рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
  class Program { public static IKernel AppKernel; static void Main(string[] args) { AppKernel = new StandardKernel(new WeaponNinjectModule()); var warrior = AppKernel.Get<Warrior>(); warrior.Kill(); Console.ReadLine(); } } 
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдирдП рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреЛрджреНрдзрд╛ рд╡рд╕реНрддреБ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 
AppKernel.Get<>() рдорд╛рдзреНрдпрдо рд╕реЗред AppKernel рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдерд┐рдпрд╛рд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рддрд▓рд╡рд╛рд░) рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рдЬрд┐рд╕реЗ рд╣рдо 
AppKernel.Get рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред (рдЬрд╣рд╛рдБ рддрдХ рд╕рдВрднрд╡ рд╣реЛ) рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ рдЬреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдФрд░ рдХреНрд╖рдг, рдЬрдм 
Warrior рд╡рд╕реНрддреБ рд╣рд░ рдмрд╛рд░ рдЕрдкрдиреЗ рд╕рд╛рде рдПрдХ рд╣рдерд┐рдпрд╛рд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
  public class OtherWarrior { private IWeapon _weapon; public IWeapon Weapon { get { if (_weapon == null) { _weapon = Program.AppKernel.Get<IWeapon>(); } return _weapon; } } public void Kill() { Weapon.Kill(); } } 
рд╣рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
  var otherWarrior = new OtherWarrior(); otherWarrior.Kill(); 
рд╣рдорд╛рд░реЗ рдпреЛрджреНрдзрд╛ рд╕реАрдзреЗ рдкреНрд░рд╕рд╡ рдХреЗ рд▓рд┐рдП рд╣рдерд┐рдпрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рд╕реБрдкрд░!
Ninject рдХрд╛ рдПрдХ рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рдпрджрд┐ ( 
public property ) 
public property рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 
[Inject] , рддреЛ 
AppKernel.Get<>() рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╕рдордп, рдХреНрд╖реЗрддреНрд░ рдХреЛ рд▓реЛрдХреЗрдЯрд░ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  public class AnotherWarrior { [Inject] public IWeapon Weapon { get; set; } public void Kill() { Weapon.Kill(); } } var anotherWarrior = AppKernel.Get<AnotherWarrior>(); anotherWarrior.Kill(); 
рдПрдХрддрд╛
рд╕рдм рдХреБрдЫ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ:
- рд╕реНрдерд╛рдкрдирд╛
 Install-Package Unity 
 - рд▓реЛрдХреЗрдЯрд░ рд╕рд░реНрд╡рд┐рд╕ (рдХрдВрдЯреЗрдирд░) рдХреА рд╢реБрд░реБрдЖрдд
 Container = new UnityContainer(); 
 - рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХрд╛рд░
 Container.RegisterType(typeof(IWeapon), typeof(Bazuka)); 
 - рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
 var warrior = Container.Resolve<Warrior>(); warrior.Kill(); 
 - рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреВрдирд┐рдЯреА рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреНрд▓рд╛рд╕ 
(Singleton) ServiceLocator , рдЬреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
 var serviceProvider = new UnityServiceLocator(Container); ServiceLocator.SetLocatorProvider(() => serviceProvider); 
 - рдЪрд╛рд▓рд╛рдХ 
OtherWarrior рдЕрдм рдЗрд╕ рддрд░рд╣ рдПрдХ рд╣рдерд┐рдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
  public class OtherWarrior { private IWeapon _weapon; public IWeapon Weapon { get { if (_weapon == null) { _weapon = ServiceLocator.Current.GetInstance<IWeapon>(); } return _weapon; } } public void Kill() { Weapon.Kill(); } } 
 
Autofac
рддреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ:
- рд╕реНрдерд╛рдкрдирд╛
 Install-Package Autofac 
 - рд╕рд░реНрд╡рд┐рд╕-рд▓реЛрдХреЗрдЯрд░ ( 
ContainerBuilder ) рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдЖрд░рдореНрдн - рдирд╣реАрдВ, рдирд╣реАрдВ, рдпрд╣ рд╕реНрд╡рдпрдВ рдХрдВрдЯреЗрдирд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХреА рддрд░рд╣ рд╣реИ
 var builder = new ContainerBuilder(); 
 
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрдВрдЬреАрдХрд░рдгред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрдВрдЬреАрдХреГрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред
 builder.RegisterType<Bazuka>(); builder.RegisterType<Warrior>(); builder.Register<IWeapon>(x => x.Resolve<Bazuka>()); 
- рдПрдХ рд▓реЛрдХреЗрдЯрд░ рд╕реЗрд╡рд╛ (рдХрдВрдЯреЗрдирд░) рдмрдирд╛рдирд╛
 var container = builder.Build(); 
 - рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
 var warrior = container.Resolve<Warrior>(); warrior.Kill(); 
 
рдорд╣рд▓ рдХреА рд╣рд╡рд╛
- рд╕реНрдерд╛рдкрдирд╛
 Install-Package Castle.Windsor 
 - рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
 var container = new WindsorContainer(); 
 - рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрдВрдЬреАрдХрд░рдгред рдСрдЯреЛрдлреЗрдХ рдХреЗ рд╕рдорд╛рдиред
 container.Register(Component.For<IWeapon>().ImplementedBy<Bazuka>(), Component.For<Warrior>().ImplementedBy<Warrior>()); 
 - рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
 var warrior = container.Resolve<Warrior>(); warrior.Kill(); 
 
рдЫреЛрдЯрд╛ рдЙрдк рдпреЛрдЧ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рднреА рдЕрд▓рдЧ рд╣реИрдВред рдХреБрдЫ 
Web.config (App.config) рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЕрдм asp.net mvc рдХреЗ рд▓рд┐рдП Ninject рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рдпрд╣ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЛ рд╕рд╛рдЭрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдпрд╛ рд╡реЗрдм рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдХреНрд╖реЗрддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдирд┐рдиреНрдЬреЗрдХреНрдЯ)
Ninject рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ (рдереНрд░реЗрдб) рдореЗрдВ), рддреЛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдорд╛рдкрдиреАрдпрддрд╛ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
| рдХреНрд╖реЗрддреНрд░ | рдмрдВрдзрди рд╡рд┐рдзрд┐ | рд╡реНрдпрд╛рдЦреНрдпрд╛ | 
| рдЕрд╕реНрдерд╛рдпреА | .InTransientScope() | рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐) рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред | 
| рдЕрд╡рд┐рд╡рд╛рд╣рд┐рдд | .InSingletonScope() | рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред | 
| рдзрд╛рд░рд╛ | .InThreadScope() | рдкреНрд░рддрд┐ рдзрд╛рдЧрд╛ рдПрдХ рд╡рд╕реНрддреБред | 
| рдЬрд╛рдВрдЪ | .InRequestScope() | рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдм рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ | 
рдПрдХрддрд╛ рдореЗрдВ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдореИрдиреЗрдЬрд░
рдПрдХрддрд╛ рдирд┐рдпрдореЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдореИрдирдЬрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ:
  _container.RegisterType<DbContext, SavecashTravelContext>(new PerRequestLifetimeManager()); 
рдЬрд╣рд╛рдВ PerRequestLifetimeManager рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдореИрдирдЬрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
 public class PerRequestLifetimeManager : LifetimeManager {  
рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ред рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ 
HttpContext.Current.Items[_key] рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдПрдХ рд╣реА рд╕рдВрджрд░реНрдн ( 
HttpContext.Current ) рдореЗрдВ рд╣реЛрдВред рдЕрдиреНрдпрдерд╛, рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн ( 
HttpContext.Current ) рдХреЛрдб рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ (рд╣рдо рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдпрд╛ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдРрд╕реЗ 
LifetimeManager рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ), рддреЛ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
Asp.net mvc рдореЗрдВ Ninject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдПрдХ asp.net mvc рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ Ninject рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЕрд▓рдЧ рд╕реЗ, рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдмрдХрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╣реЛрдордХрдВрдЯреНрд░реЛрд▓рд░ рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЗрдВрдбреЗрдХреНрд╕ рджреЗрдЦреЗрдВред (/Contollers/HomeController.cs):
 public class HomeController : Controller { public ActionResult Index() { return View(); } } 
рдФрд░ (/ рджреГрд╢реНрдп / рд╣реЛрдо / рдЗрдВрдбреЗрдХреНрд╕.рдХреНрд╕реНрдЯ рдПрдордПрд▓):
 @{ ViewBag.Title = "LessonProject"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>LessonProject</h2> 
рд▓реЙрдиреНрдЪ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдиреЛрдЯ: рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрд╛рдж рдХреЗ рдкрд╛рдареЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗредрдЕрдм рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП Ninject рдореЙрдбреНрдпреВрд▓ рдФрд░ Ninject.MVC3 рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
 Install-Package Ninject.MVC3 
App_Start рдлрд╝реЛрд▓реНрдбрд░ (/App_Start/NinjectWebCommon.cs) рдкрд░ рдХрдХреНрд╖рд╛ рдЬреЛрдбрд╝реЗрдВ:
 [assembly: WebActivator.PreApplicationStartMethod(typeof(LessonProject.App_Start.NinjectWebCommon), "Start")] [assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(LessonProject.App_Start.NinjectWebCommon), "Stop")] namespace LessonProject.App_Start { using System; using System.Web; using Microsoft.Web.Infrastructure.DynamicModuleHelper; using Ninject; using Ninject.Web.Common; public static class NinjectWebCommon { private static readonly Bootstrapper bootstrapper = new Bootstrapper();  
RegisterServices рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЖрд░рдВрдн рдХреЛ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЪрдВрдЪрд▓ IWeapon рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ:
  public interface IWeapon { string Kill(); } тАж public class Bazuka : IWeapon { public string Kill() { return "BIG BADABUM!"; } } тАж private static void RegisterServices(IKernel kernel) { kernel.Bind<IWeapon>().To<Bazuka>(); } 
рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ, 
[Inject] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
  public class HomeController : Controller { [Inject] public IWeapon weapon { get; set; } public ActionResult Index() { return View(weapon); } } 
рджреГрд╢реНрдп рджреЗрдЦреЗрдВ:
 @model LessonProject.Models.IWeapon @{ ViewBag.Title = "LessonProject"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>LessonProject</h2> <p> @Model.Kill() </p> 
рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

Ninject WebActivator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
- рдЕрдкрдиреЗ OnePerRequestHttpModule рдФрд░ NinjectHttpModule рдореЙрдбреНрдпреВрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ
 - рд╕реНрдЯреИрдВрдбрдЖрд░реНрдЯ рдХрд░реНрдиреЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ
 - рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред
 
DependencyResolver
Asp.net mvc3 рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАResolver рд╡рд░реНрдЧ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рдкрдВрдЬреАрдХреГрдд рд╕реЗрд╡рд╛рдПрдВ (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП DI рдХрдВрдЯреЗрдирд░) рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  public class HomeController : Controller { private IWeapon weapon { get; set; } public HomeController() { weapon = DependencyResolver.Current.GetService<IWeapon>(); } public ActionResult Index() { return View(weapon); } } 
рдкрд░рд┐рдгрд╛рдо
рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ DI рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЗ рдордЬрдмреВрдд рд╕реБрд╕рдВрдЧрддрддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рднреА рд╕реНрд░реЛрдд 
https://bitbucket.org/chernikov/lessons рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ