рд╕реНрдЯреНрд░рдХреНрдЪреБрд░рдкреЗрдЬрд╝ - рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдВрджрд░реНрдн (3/3)

рдЕрдм рдпрд╣ рд╕рдордп рд╣реИ:

рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░


рд╕рдВрд╕реНрдХрд░рдг 2.5+ рдХреЗ рдмрд╛рдж рд╕реЗ, рдирдИ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдпрд╛ рдЙрд╕рдХреЗ рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рдХреНрд╖реНрдп рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдПрдУрдкреА рдврд╛рдВрдЪрд╛ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдХрд╛рдлреА рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:


рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдПрдирд░рд┐рдЪрд╡рд┐рде рдкрд░ рдСрдиреНрдХреНрд░рд┐рдЯрд┐рдпрди рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдВрддрд░ рдФрд░ рд▓рд╛рднреЛрдВ рдХреЛ рдмрддрд╛рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

OnCreation


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public class ClassS : IClassS { public int Counter { get; private set; } public void Init() { Counter = -100; } public void Init(IClass1 class1) { Counter = -50; } public void Increase() { Counter++; } } 


рдЕрдм, рдЖрдк рдСрдирдХреНрд░реЗрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 public class InterceptionsSimple { public IContainer Container; public InterceptionsSimple() { Container = new Container(x => x.For<IClassS>() .Use<ClassS>() .OnCreation(c => c.Init())); } } 

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

рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рдХреНрдЪреБрд░рдкреЗрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реА рдЕрддрд┐рднрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
 public class InterceptionWithContext { public IContainer Container; public InterceptionWithContext() { Container = new Container(x => { x.For<IClass1>().Use<Class1>(); x.For<IClassS>().Use<ClassS>() .OnCreation((context, cls) => { var class1 = context.GetInstance<IClass1>(); cls.Init(class1); }); }); } } 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рддрдХ рд╣реА рдкрд╣реБрдВрдЪ рд╣реИ рдФрд░ рдЖрдк рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реНрдЯреНрд░рдХреНрдЪреБрд░реЗрд╕реНрдкреЛрд░реНрдЯ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред

EnrichWith


рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдирд┐рд░реНрдорд┐рдд рд╡рд░реНрдЧ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рд╣реЛ
 public class ClassSs : ClassS { private readonly ClassS s; public int Abs { get { return Math.Abs(s.Counter); } } public ClassSs(ClassS s) { this.s = s; } } 

рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪрд░рдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛:
 public class InterceptionWithContext2 { public IContainer Container; public InterceptionWithContext2() { Container = new Container(x => { x.For<IClass1>().Use<Class1>(); x.For<IClassS>().Use<ClassS>() .EnrichWith(cls => { cls.Init(); return new ClassSs(cls); }); }); } } 

рдирддреАрдЬрддрди, рдЬрдм рд╣рдо рдПрдХ рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ IClassS рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреНрд▓рд╛рд╕рд╕ рдХреНрд▓рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░


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

рддреЛ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдбреЙрдкреНрдЯрд░ рд╣реИред
 public interface IAdapter { string SomeMethod(); } public interface IAdapter<T> : IAdapter {} public class Adapter<T> : IAdapter<T> { public string SomeMethod() { return typeof (T).ToString(); } } 

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдХрдИ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рднреА рд╣реИрдВред
 public class StringAdapter : Adapter<string> {} public class IntAdapter : Adapter<int> {} 

рдПрдбреЙрдкреНрдЯрд░ рдореЗрдВ рдЯреА рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИред

рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧрд░ рдПрдбреИрдкреНрдЯрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдФрд░ рдХреЙрд▓ рдХрд░рдирд╛ред
 public class GenericTypes { public IContainer Container; public GenericTypes() { Container = new Container(x => { x.For(typeof (IAdapter<>)).Use(typeof (StringAdapter)); x.For<IAdapter<int>>().Use<IntAdapter>(); }); } } 

рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рджреЛ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдмреБрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдзрд┐ рдПрдХ: рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред
 private static string GenericTypesExample() { var container = new GenericTypes().Container; var stringAdapter = container.GetInstance<StringAdapter>(); var intAdapter = container.GetInstance<IntAdapter>(); return stringAdapter.SomeMethod() + " " + intAdapter.SomeMethod(); } 

рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд╛рдЧреВ рд╣реИред рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреБрдВрдЬреА (рдЯреА) рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреНрд░реЙрдиреНрдЪрдкреЗрдЬрд╝ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХрдВрдЯреЗрдирд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рди рд░рд╣рддреА рд╣реИ, рддреИрдпрд╛рд░реА рдХреА рд╡рд┐рдзрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
 private static string GenericTypesExample() { var container = new GenericTypes().Container; var instance = container .ForGenericType(typeof (IAdapter<>)) .WithParameters(typeof(string)) .GetInstanceAs<IAdapter>(); return  instance.SomeMethod(); } 

рдпрд╛рдиреА рд╣рдо рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП IAdapter рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
 private static string GenericTypesExample<T>() { var container = new GenericTypes().Container; var instance = container .ForGenericType(typeof (IAdapter<>)) .WithParameters(typeof(T)) .GetInstanceAs<IAdapter>(); return instance.SomeMethod(); } 

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдбрд╛рдкреНрдЯрд░ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЯреА рдХреЗ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЧреБрдг


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

рд▓реЗрдЦрдХ рдЦреБрдж рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдореВрд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЬрдЧрд╣ рдкрд░ рд╕рдм рдХреБрдЫ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рд╣реИ, рдЕрдЧрд▓рд╛ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╡реИрд▓рд┐рдбреЗрд╢рдирдореЗрдереЛрдб рд╣реИ , рдмрд╛рдХреА рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рд╣реИред

ValidationMethod


рд╕реНрд╡-рдкрд░реАрдХреНрд╖рдг рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдкрдиреЗ рдХреБрдЫ рдХрдХреНрд╖рд╛ рд▓рд┐рдЦреА рдФрд░ рдЖрдк рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧреАред рд╕реНрдЯреНрд░рдХреНрдЪреБрд░рдкреЗрдЬрд╝ рдЗрд╕реЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡-рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рд╢реНрди рдореЗрдВ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдПрдХ рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреВрдареА рдХреНрд╖рдорддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЬрдЯрд┐рд▓ рд╕рдВрдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЦреБрдж рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд╖реЗрддреНрд░ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
 public class SelfValidation { public string Name { get; set; } [ValidationMethod] public void IsClassBuildCorrectly() { if(string.IsNullOrWhiteSpace(Name)) throw new ArgumentException("Name can't be null or empty"); } } 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ ValidationMethod рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ; рд╕рдВрд░рдЪрдирд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдЙрди рд╕рднреА рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ рдФрд░ AssertConfigurationIsValid рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрдбрд╝реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднрд░реЗрдВ, рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╢реНрди рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред

рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП:
 public class ValidationShowcase { public IContainer Container; public ValidationShowcase() { Container = new Container(x => x.ForConcreteType<SelfValidation>()); } } 

рдЕрдм рдЖрдк рдЗрд╕реЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 private static string ValidationShowcaseExample() { var container = new ValidationShowcase().Container; container.AssertConfigurationIsValid(); return ""; } 

рдЬрдм рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ StructureMapConfigurationException рдорд┐рд▓реЗрдЧреА, рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░ рдореИрдк рдЖрдВрддрд░рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЪреЗрдХ рдХреЗ рдХрд╛рд░рдг рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╣рдорд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдмрд┐рд▓реНрдХреБрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

PluginFamily
рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдореИрдк рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреИрдЧ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рд╣рдордиреЗ рд▓рд┐рдЦрд╛ рд╡реИрд╕рд╛ рд╣реА рд╕рдорддреБрд▓реНрдп ред < Plugin type > рдХреЗ рд▓рд┐рдП ред

рдЖрдк рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реЛрдЧрд╛ред
 [PluginFamily("Default", IsSingleton = true)] 


pluggable
рдЪрд┐рд╣реНрдирд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд░рд╛рдмрд░ ред < Pluggable рдкреНрд░рдХрд╛рд░ > рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
 [Pluggable("Default")] 


SetterProperty
рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛрдВрдЧреЗ рдФрд░ рдпрджрд┐ рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░ рдореИрдк рдЙрдиреНрд╣реЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд░рдирдЯрд╛рдЗрдо рдПрд░рд░ рд╣реЛрдЧрд╛ред

рдкрд░реАрдХреНрд╖рдг


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

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

Moq рдФрд░ RhinoMock рдХреА рд╕рдореАрдХреНрд╖рд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░ рдореИрдк рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЖрдк рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдЪрд╛рд░ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд┐рд╖рдп:

рджреВрд╕рд░реЗ рднрд╛рдЧ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ:

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


All Articles