рдХрдо рдпреБрдЧреНрдорди рдЕрдХреНрд╕рд░ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдВрдХреЗрдд рдФрд░ рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI) рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдоред рдлрд╛рдЙрд▓рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, DI рдирд┐рдпрдВрддреНрд░рдг рдЙрд▓рдЯрд╛ (IoC) рдХреЗ рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ, рдЬрд┐рд╕реЗ
"рд╣реЙрд▓реАрд╡реБрдб рд╕рд┐рджреНрдзрд╛рдВрдд" рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
ред рдЗрд╕ рдмреАрдЪ, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ рдХрд╛рдлреА рдзреБрдВрдзрд▓реА рд╣реИрдВред рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдЗрд╕ рдФрд░ рдЕрдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд╕рдУрдПрд▓рдЖрдИрдбреА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдо рд╕рд┐рджреНрдзрд╛рдВрдд, рдЬреЛ рдЕрдХреНрд╕рд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЕрд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред
рдХрд┐рд╕реА рднреА рдкреИрдЯрд░реНрди рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде, рдбреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдБрдЧрд╛ (рд░реВрд╕реА рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдирд╛рдореЛрдВ рдХреЗ рдХреБрдЫ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде)ред
рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдирдВрдмрд░ 1ред "рдХрдВрдЯреНрд░реЛрд▓ рдлреНрд░реАрдХред" рд╡реНрдпрд╕рдиреАред
рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реАрдзреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреА рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╡рд┐рдкрд░реАрддред
рдПрдВрдЯреАрдкреИрдЯрд░ рд╣рдореЗрд╢рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирдП рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкрд░рд╕реНрдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдХрдВрдЯреНрд░реЛрд▓ рдлреНрд░реАрдХред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
private readonly ProductRepository repository;
public ProductService()
{
string connectionString = ConfigurationManager.ConnectionStrings["Context"].ConnectionString;
this.repository = new SqlProductRepository(connectionString);
}
-: Dependency Injection ( ). , Control Freak, :
private readonly ProductRepository repository;
public ProductService(ProductRepository repository)
{
if (repository == null)
throw new ArgumentNullException("repository");
this.repository = repository;
}
- тДЦ2. ┬лBastard Injection┬╗. .
┬л ┬╗, .Net, BCL. , . , DI-. - :
private readonly ProductRepository repository;
public ProductService() : this(ProductService.CreateDefaultRepository())
{
}
public ProductService(ProductRepository repository)
{
if (repository == null)
throw new ArgumentNullException("repository");
this.repository = repository;
}
private static ProductRepository CreateDefaultRepository()
{
string connectionString = ConfigurationManager.ConnectionStrings["Context"].ConnectionString;
return new SqlProductRepository(connectionString);
}
-, Dependency Injection. , .. DI.
- тДЦ3. ┬лConstrained Construction┬╗. .
- , ┬л┬╗ . ┬л Reflection┬╗. - :
string connectionString = ConfigurationManager.ConnectionStrings["Context"].ConnectionString;
string productRepositoryTypeName = ConfigurationManager.AppSettings["ProductRepositoryType"];
var productRepositoryType = Type.GetType(productRepositoryTypeName, true);
var repository = (ProductRepository)Activator.CreateInstance(productRepositoryType, connectionString);
-, .
- тДЦ4. ┬лService Locator┬╗. -.
- .
DI-- , - , Service Locator -, , - , - .
- DI
тАЬDependency Injection in .NETтАЭ, Mark Seemann.