Dependencyinjection: рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рд░реЛрдХрдХрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рд╕рдЬрд╛рдиреЗ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рджрд┐рд╕ре░ 2015  ┬╖  31рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: aspnet/DependencyInjection

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╣рд╛рдиреА / рдХреЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╕реЗрд╡рд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдХрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рджреЗрдЦреЗрдВ: https://github.com/aspnet/Mvc/issues/3739

рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

public interface IMyService
{
    void DoSomething();
}

public partial class DefaultMyService
{
    public partial void DoSomething();
}

public partial class DecoratorForMyService
{
    private IMyService decorated;

    public DecoratorForMyService(IMyService decorated)
    {
        this.decorated = decorated;
    }

    public partial void DoSomething();
}

рд╕реЗрд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

var collection = new ServiceCollection();
collection.AddTransient<IMyService, DefaultMyService>();
collection.AddTransient<IMyService, DecoratorForMyService>();
var provider = collection.BuildServiceProvider();
var service = collection.GetService<IMyService>(); // Returns the constructed DecoratorForMyService

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

var collection = new ServiceCollection();
collection.AddTransient<IMyService, DefaultMyService>();
collection.AddTransient<IMyService>(_provider =>
{
    // Returns the previously registered IMyService.
    // Calling _provider.GetService<IEnumerable<IMyService>>() here
    // would return a collection containing all registered IMyServices
    // except for this one.
    var decorated = _provider.GetService<IMyService>(); 
    return new DecoratorForMyService(decorated);
});
var provider = collection.BuildServiceProvider();
var service = collection.GetService<IMyService>(); // Returns the constructed DecoratorForMyService

рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рджреЛрд╕реНрддреЛрдВ!

рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдкреЙрд▓рд┐рд╢ рдХреА рд╣реИ рдФрд░ Decorate<TService> рдПрдкреАрдЖрдИ рдХреЛ рдореЗрд░реЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рд╛рд░ рд╕реЗ рд╕реНрдХреНрд░реВрдЯрд░ (v1.9) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (README.md рд╕реЗ):

var collection = new ServiceCollection();

// First, add our service to the collection.
collection.AddSingleton<IDecoratedService, Decorated>();

// Then, decorate Decorated with the Decorator type.
collection.Decorate<IDecoratedService, Decorator>();

// Finally, decorate Decorator with the OtherDecorator type.
// As you can see, OtherDecorator requires a separate service, IService. We can get that from the provider argument.
collection.Decorate<IDecoratedService>((inner, provider) => new OtherDecorator(inner, provider.GetRequiredService<IService>()));

var serviceProvider = collection.BuildServiceProvider();

// When we resolve the IDecoratedService service, we'll get the following structure:
// OtherDecorator -> Decorator -> Decorated
var instance = serviceProvider.GetRequiredService<IDecoratedService>();

рд╕рднреА 31 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рдо рдРрд╕рд╛ рдХреБрдЫ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп DI рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╛ рд╣рдо рдмрд╕ рд╣рд╛рд░ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╣рдорд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

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

  • NInject рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред 'рдХрд╛рд░рдЦрд╛рдиреЗ' рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
  • рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореИрдк рд╕рдорд╛рди рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдкрдВрдЬреАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓рдкреЗрдЯрдирд╛ рд╣реИред
  • рд╕реНрдкреНрд░рд┐рдВрдЧ.рдиреЗрдЯ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ; рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЦреЛрдЬ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрддреА рд╣реИред
  • рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбрд╕рд░ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрд╕ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдкрд░реАрдд рдХреНрд░рдо рд╡рд╛рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗ рд╕рдХрддрд╛ рд╣реИ
  • Autofac NInject рдХреЗ рд╕рдорд╛рди рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рдирд╛рдо' рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпреВрдирд┐рдЯреА рдиреЗ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрд┐рдд рдкрдВрдЬреАрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдСрдЯреЛрдлреИрдХ рдХреЗ рд╕рдорд╛рди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рд╡рд┐рдВрдбрд╕рд░ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдпреЗ рд╕рднреА .NET рдХреЗ рд▓рд┐рдП 'рдкреНрд░рдореБрдЦ' DI рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдирд╛рдо рджреЗрдЦреЗ рдЬреЛ рд▓рдЧрднрдЧ рдЙрддрдиреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рд╣реИ рд╡рд╣ рд╡рд┐рдВрдбрд╕рд░ рдФрд░ рдпреВрдирд┐рдЯреА рдХреЗ рд╕рдорд╛рди рд╣реИред

@davidfowl :

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

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

рдЗрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреНрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд╛рдПрдЧрд╛ред

рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 'рд╕реНрдХреЛрдк' рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдЬреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдХреА рдЧрд╛рд░рдВрдЯреА IServiceProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЬрдмрдХрд┐ рдЕрдиреНрдп DI рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдХ-рд╡рд┐рдзрд┐ IServiceProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рд╢рд╛рдпрдж рдирд╣реАрдВред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ рдпрджрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ 'рд╡рд┐рд╢реЗрд╖' рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд╣рд╛рдВ рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдпрд╣рд╛рдВ рдЙрди рдЪреАрдЬреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдПрд╕реНрдкрдиреЗрдЯ/рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ IServiceProvider рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдЕрддреНрдпрдВрдд рдЧреИрд░-рд╡рд░реНрдгрдирд╛рддреНрдордХ GetService(Type) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рддреА рд╣реИрдВ:

  • IServiceProvider рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛
  • IServiceScopeFactory . рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛
  • рдЦреБрд▓реЗ рддреМрд░ рдкрд░ рдЬреЗрдиреЗрд░рд┐рдХ IEnumerable<> рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкрдВрдЬреАрдХреГрдд рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

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

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВрдиреЗ рдЕрдиреНрдп рдбреАрдЖрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдПрд╕реНрдкрдиреЗрдЯ/рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдпрд╣ рдпрд╛ рд╡рд╣ рдХрд░рдиреЗ рджреЗрдирд╛' рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЧреИрд░-рдореБрджреНрджрд╛ рд╣реИред

DI рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдирд╛ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рдФрд░ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдЙрд╕ рдкреАрдЖрд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреЛрдк/рдСрд░реНрдбрд░/рдЖрджрд┐ рдХреЗ 36 рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕ рд╣реИред рдореБрдЭреЗ рдмрддрд╛рдУ рдХрд┐ рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдиреЗ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛ред рдЕрдм, рдПрдХ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ 'рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ ...' рдпрд╛ рдЬреЛ рднреА рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкрд░рд┐рдкрддреНрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдлреАрдЪрд░ рдЖрдЗрдбрд┐рдпрд╛ рдкрд╕рдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рд╕рдордп рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

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

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

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

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

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдбреЗрд╡рд┐рдб! рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ IServiceCollection рдЕрдореВрд░реНрдд рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдпрд╣ рдореБрдЭреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдореЗрд░реА рдореЗрдЬрдмрд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреА рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдореБрдЭреЗ рд╕рдЬрд╛рд╡рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдм рдореИрдВ рдереЛрдбрд╝рд╛ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ ... рдореИрдВ рдпрд╛ рддреЛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ IServiceCollection рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдХрд┐рд╕реА рддреГрддреАрдп рдкрдХреНрд╖ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдХрдВрдЯреЗрдирд░ рд╣реИрдВ (рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░/рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рдЕрд▓рдЧ-рдЕрд▓рдЧ - рдпрд╛ рддреЛ ConfigureServices рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)

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

рддреЛ рдХреНрдпрд╛ рдЖрдк рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ IServiceCollection рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдЬрдЧрд╣ рдПрдХ рддреГрддреАрдп рдкрдХреНрд╖ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВрдЧреЗ?

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

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЕрдкрдиреА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ... рд╕рдордп рд╕реАрдорд╛ :-)

рдФрд░ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП - рдЕрдЧрд░ рд╣рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдпрд╣ рдЬреАрдердм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ ??? :-)

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

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

рдореИрдВ рдирдП ASP.NET рдЕрдиреБрд░реЛрдз/рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдУрд╡рд░рдХрд┐рд▓ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ ?! рдореЗрд░реЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдлрд╝реАрдбрдмреИрдХ рд╡рд╛рдХрдИ рд╕рд░рд╛рд╣рдиреАрдп рд╣реИ!

рдФрд░ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП - рдЕрдЧрд░ рд╣рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдпрд╣ рдЬреАрдердм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ ??? :-)

рдПрд╣, рдпрд╣ _apps_ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ?

рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ ?! рдореЗрд░реЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдлрд╝реАрдбрдмреИрдХ рд╡рд╛рдХрдИ рд╕рд░рд╛рд╣рдиреАрдп рд╣реИ!

рдХреЗрд╡рд▓ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддрд╛рд░-рддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдХреБрдЫ рдЫрджреНрдо рдХреЛрдб:

public class ErrorHandlingMediator : IMediator
{
    public ErrorHandlingMediator(IErrorHandler errorHandler, IMediator inner) { }
}

public class ValidatingMediator : IMediator
{
    public ErrorHandlingMediator(IEnumerable<IValidator> validators, IMediator inner) { }
}

public class TransactionMediator : IMediator
{
    public ErrorHandlingMediator(ITransactionManager transactionManager, IMediator inner) { }
}

// Add IErrorHandler, IValidators and ITransactionManager to the service collection.

services.AddScoped<IMediator>(provider => {
    var singleFactory = new Func<Type, object>(provider.GetService);
    var multiFactory = new Func<Type, IEnumerable<object>>(provider.GetServices);

    // Let's configure the following pipeline: Error Handling -> Validation -> Transaction -> Request Handler

    return new ErrorHandlingMediator(
        provider.GetService<IErrorHandler>(),
        new ValidatingMediator(
            provider.GetServices<IValdiator>(),
            new TransactionMediator(
                provider.GetService<ITransactionManager>(),
                new Mediator( // This is the Mediator type from MediatR...
                    singleFactory,
                    multiFactory))));
});

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреИрд╕реЗ IErrorHandler рдЖрджрд┐ред рдореБрд╕реНрдХрд╛рди:

o_O - рдореИрдВ рдмреЗрд╡рдХреВрдл рд╣реВрдБ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ред :-) рдпрд╣ рдЧрддрд┐рд╢реАрд▓/рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рдж рдХреНрд░рд┐рд╕реНрдЯрд┐рдпрди !! рдЕрдЧрд░ рд╣рдо рдХрднреА рдХрд┐рд╕реА рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдмрд┐рдпрд░ рдореБрдЭ рдкрд░ рд╣реИред :рдмреАрдпрд░:

рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ! :-)

рд╢рд╛рдпрдж рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВ: рдореИрдВ рдордзреНрдпрд╕реНрде рдХреЗ рдмрдЬрд╛рдп IRequestHandler<TMessage> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕ рддрд░рд╣, рдордзреНрдпрд╕реНрде рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдмрдирд╛рдирд╛/рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдХреЛрдб рд╡рд╣рд╛рдВ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдореИрдВ рд╣реИрдВрдбрд▓рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж рдлрд┐рд░ рд╕реЗ, рдХреНрд░рд┐рд╕реНрдЯрд┐рдпрди!

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдЬреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬреЗрдиреЗрд░рд┐рдХ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ASP.NET рдХреЛрд░ рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛рдиреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдареЛрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдпрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдЬреИрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдЙрдЪрд┐рдд рд╡рд░реНрдгрди рд╣реИ?

рддреЛ рдЗрд╕ рдирдЬрд░рд┐рдП рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлреАрдЪрд░ рдХрд╛рдлреА рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ, рдпрд╛ рд╡реЗ рдмрд╕ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рдЗрд╕ рдиреНрдпреВрдирддрдо, "рд╕рдмрд╕реЗ рдХрдо рдЖрдо рднрд╛рдЬрдХ" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдвреЗрд░ рдХрд░рдХреЗ, рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ' t рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмреЛрд▓ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ (рдХрдо рд╕реЗ рдХрдо) рдХрдВрдлрд░реНрдорд┐рдВрдЧ рдХрдВрдЯреЗрдирд░ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрд╡рдЧрдд рд╣реВрдВред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдмреАрдЪ рд╣рд┐рддреЛрдВ рдХрд╛ рдЯрдХрд░рд╛рд╡ рд╣реЛрдЧрд╛ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЗрдЪреНрдЫрд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪред

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

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ; рдХрдИ рд▓реЛрдЧ рдЖрдкрдХреЗ рдврд╛рдВрдЪреЗ/рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЦрд░рд╛рдм рдлреЙрд░реНрдо рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЦреБрдж рдХреЛ рдЗрддрдирд╛ рдЕрдиреБрднрд╡реА рдирд╣реАрдВ рдорд╛рдирддрд╛ рдХрд┐ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХреВрдВ рдХрд┐ рд╡рд╣ рд╕рдВрддреБрд▓рди рдХрд╣рд╛рдБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдЕрдЧрд░ рдореИрдВрдиреЗ рдЯреАрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрддреБрд▓рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ "рдЬреЛ рдХреБрдЫ рднреА рдврд╛рдВрдЪреЗ рдХреЛ рдЦреБрдж рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХреБрдЫ рдФрд░ рдЙрдиреНрдирдд рдХреЗ рд▓рд┐рдП, рд╣рдо BYOC рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ"ред

рдпрджрд┐ Microsoft рдХреЛ рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдвреЗрд░ рд▓рдЧрд╛рдирд╛ рдерд╛, рддреЛ рд╡реЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╣рддреНрдпрд╛ рдХрд░ рджреЗрдВрдЧреЗ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо .NET рд╕реНрдерд╛рди рдореЗрдВ рдЕрдиреНрдп, рдореМрдЬреВрджрд╛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдорд░реЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рд╣рд╡рд╛ рдХреЛ рдЪреВрд╕ рд▓реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рд╣реИ рдЕрдиреНрдп рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рдпрд╛рд╕ред рдЕрдм, рдЗрд╕рдХреА рдЕрднреА рднреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; https://gist.github.com/khellang/c9d39444f713eab04c26dc09d5687196 :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдпреЗ рдврд╛рдВрдЪреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВ?

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИред рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .NET рдврд╛рдВрдЪреЗ рдореЗрдВ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдПрдХ рдЕрдиреБрд░реВрдк рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдкрдиреЗ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдореМрдЬреВрджрд╛ рдЕрдореВрд░реНрдд рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ Microsoft рдХреЛ рдЙрдирдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрдЯреЗрдирд░ рдПрдбреЗрдкреНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдХреЛрдИ рднреАред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо ServiceCollection рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд .NET рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрд┐рдВрджреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред

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

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

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИред рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдмрд┐рд▓реНрдХреБрд▓ред рдЖрдк рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ: рдкрд▓рдХ: рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреНрдпреЛрдВ рд╣реИред рдПрдХреНрд╕рдЯреЗрдВрд╢рдиред рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди "рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░" рдирд╣реАрдВ рд╣реИ?

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .NET рдврд╛рдВрдЪреЗ рдореЗрдВ рд╣реИред

рдирд╣реАрдВ рдпрд╣ рдирд╣реАрдВред рдпрд╣ рдПрдХ NuGet рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдиреНрдп IoC рдХрдВрдЯреЗрдирд░ рдХреА рддрд░рд╣ рдирд┐рд░реНрднрд░ рд╣реИрдВ: рдореБрд╕реНрдХрд╛рди:

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

рдпрд╛ рдЖрдк рдХрд┐рд╕реА рднреА "рдЕрдиреБрд░реВрдк рдХрдВрдЯреЗрдирд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдкреЙрдЗрдВрдЯ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

BTW, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ MS.Ext.DI рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреЗ рдПрдбреЗрдкреНрдЯрд░ рд╣реИрдВ? рдЙрд╕ рдкрд░ рдореЗрд░рд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдкрдврд╝реЗрдВ: рдкрд▓рдХ:

рдЖрдк рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЗрд╡рд▓ IServiceProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ .NET 1.1 рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдмреАрд╕реАрдПрд▓ ( System рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рддрд╣рдд mscorlib) рдореЗрдВ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╕реНрддреБрддрдГ рдХреЛрдб рдХреА 4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо ServiceCollection рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд .NET рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрд┐рдВрджреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред

рдпреЗ .NET рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреЙрдЗрдВрдЯ рдХреНрдпрд╛ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рд╣рдореЗрдВ рдмрд╕ рдЙрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдорд╛рдкрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдиреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?

рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджрд╛ рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╕рдЬрд╛рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЧрд▓рдд рд╕реЗрд╡рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗ рдореЗрдВ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рдмрд╛рдж рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рдЗрд╕рд╕реЗ рдХрднреА рдХреИрд╕реЗ рджреВрд░ рд╣реЛрдВрдЧреЗ? рд╕рдВрдХреЗрдд: рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, IServiceCollection рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ :stuck_out_tongue_winking_eye:

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ .NET рдврд╛рдВрдЪреЗ рд╕реЗ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрдХреНрд╖ рд╕реЗ рдХрдВрдЯреЗрдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ рдФрд░ рдврд╛рдВрдЪреЗ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдХреБрдЫ рдЬрд░реВрд░рддреЛрдВ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рд╣реИред

рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА IServiceProvider рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╕реБрдВрджрд░ рд╕рднреНрдп рдврд╛рдВрдЪрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН ASP.NET: рдореБрд╕реНрдХрд╛рди: рдпрд╣ рдХрдВрдЯреЗрдирд░ рдЙрд╕ рдврд╛рдВрдЪреЗ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдВрдЧреЗ-рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ, рдХреБрдЫ рднреА рдХрдо рдирд╣реАрдВ .

рджреЛрд╕реНрддреЛрдВ!

рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдкреЙрд▓рд┐рд╢ рдХреА рд╣реИ рдФрд░ Decorate<TService> рдПрдкреАрдЖрдИ рдХреЛ рдореЗрд░реЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рд╛рд░ рд╕реЗ рд╕реНрдХреНрд░реВрдЯрд░ (v1.9) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (README.md рд╕реЗ):

var collection = new ServiceCollection();

// First, add our service to the collection.
collection.AddSingleton<IDecoratedService, Decorated>();

// Then, decorate Decorated with the Decorator type.
collection.Decorate<IDecoratedService, Decorator>();

// Finally, decorate Decorator with the OtherDecorator type.
// As you can see, OtherDecorator requires a separate service, IService. We can get that from the provider argument.
collection.Decorate<IDecoratedService>((inner, provider) => new OtherDecorator(inner, provider.GetRequiredService<IService>()));

var serviceProvider = collection.BuildServiceProvider();

// When we resolve the IDecoratedService service, we'll get the following structure:
// OtherDecorator -> Decorator -> Decorated
var instance = serviceProvider.GetRequiredService<IDecoratedService>();

@рдЦреЗрд▓рдВрдЧ рд╣рд╛рдБ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ IdentityServer рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдерд╛ ...

@рдЦреЗрд▓рдВрдЧ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдорджрдж рдорд┐рд▓реАред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреЗрд╢рдХрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред

@brockallen IdentityServer4 рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛?

@brockallen IdentityServer4 рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛?

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

@davidfowl DI рдХреЗ рд╕рд╛рде рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ (рдореЗрд░реЗ рд╡рд┐рд░реЛрдз рдореЗрдВ); рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдареЛрд╕ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рдПрдХ рдореМрд▓рд┐рдХ рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрд╕рдЖрд░рдкреА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдлреИрдХреНрдЯреНрд░реА рд▓реИрдореНрдбрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрддрдирд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ) рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд░реНрдерди рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

var collection = new ServiceCollection() .AddSingleton<IPackageService>(p => new FaultHandlingPackageService(p.GetService<PackageService>()));

@andersborum рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рд╕реНрдХреНрд░реВрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреЛрдб рджреЗрдЦреЗрдВред рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ aspnet/Home#2350 . рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ZhiqiangTao picture ZhiqiangTao  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MatthewLymer picture MatthewLymer  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

phanikvr picture phanikvr  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

divega picture divega  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TimRowe picture TimRowe  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ