Dependencyinjection: рдкреНрд░рд╢реНрди: рдЖрдк рдХрдВрд╕реЛрд▓ рдРрдк рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдлрд╝рд░ре░ 2016  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: aspnet/DependencyInjection

рдореИрдВ рдПрдХ рд╡реЗрдмрдЬреЙрдм рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреА рдореЗрд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛ рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рдСрдирд▓рд╛рдЗрди рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рди рд╣реА рдХрдВрд╕реЛрд▓ рдРрдк рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

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

рдХрд┐рд╕реА рд╡реЗрдмрдПрдк рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдЖрдиреЗ рдХреА рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реЛрдЧреА рдЗрд╕рдХрд╛ рдПрдХ рд╕реНрдХреЗрдЪ:

    public class Program
    {
        public IConfigurationRoot Configuration { get; set; }
        public IServiceProvider ServiceProvider;

        public Program(IApplicationEnvironment env, IRuntimeEnvironment runtime)
        {
            // What can I do with env and runtime?
            var services = new ServiceCollection();
            ServiceProvider = services.BuildServiceProvider();

            var builder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddEnvironmentVariables();

            Configuration = builder.Build();
        }

        private void ConfigureServices(IServiceCollection services)
        {
            // Who calls this?
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<DbContext>(options =>
                    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
            services.AddScoped<IMyService, MyService>();
        }

        public void Run(IMyService service, DbContext dbContext)
        {
            // My program code.
        }

        public static void Main(string[] args)
        {
            // Entry point. What in here?
        }
    }

рдХреЛрдИ рдЙрдкрд╛рдп? рдХреГрдкрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд╣реЗрдВред

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

рд╢рд╛рдпрдж рдпрд╣ рдкреЛрд╕реНрдЯ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
ASP.NET 5 - ASP.NET 5 рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рдЧрд╣рд░реА рдбреБрдмрдХреА
https://msdn.microsoft.com/en-us/magazine/dn913182.aspx

рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рд╡рд╛ рд╕рдХрддрд╛ рд╣реВрдБ?
configservices рд╡рд┐рдзрд┐ рдФрд░ рдореЗрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдлрд╝рд░, 4, рд╡рд░реНрд╖ 2016 10:21 AM рдкрд░, "chr1sk0n" [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рд╢рд╛рдпрдж рдпрд╣ рдкреЛрд╕реНрдЯ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
ASP.NET 5 - ASP.NET 5 рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рдЧрд╣рд░реА рдбреБрдмрдХреА
https://msdn.microsoft.com/en-us/magazine/dn913182.aspx

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/aspnet/DependencyInjection/issues/357#issuecomment -179727288
.

рдХрд┐рд╕реА рд╡реЗрдмрдПрдк рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдЖрдиреЗ рдХреА рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реЛрдЧреА рдЗрд╕рдХрд╛ рдПрдХ рд╕реНрдХреЗрдЪ:

    public class Program
    {
        public IConfigurationRoot Configuration { get; set; }
        public IServiceProvider ServiceProvider;

        public Program(IApplicationEnvironment env, IRuntimeEnvironment runtime)
        {
            // What can I do with env and runtime?
            var services = new ServiceCollection();
            ServiceProvider = services.BuildServiceProvider();

            var builder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddEnvironmentVariables();

            Configuration = builder.Build();
        }

        private void ConfigureServices(IServiceCollection services)
        {
            // Who calls this?
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<DbContext>(options =>
                    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
            services.AddScoped<IMyService, MyService>();
        }

        public void Run(IMyService service, DbContext dbContext)
        {
            // My program code.
        }

        public static void Main(string[] args)
        {
            // Entry point. What in here?
        }
    }

рдХреЛрдИ рдЙрдкрд╛рдп? рдХреГрдкрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд╣реЗрдВред

рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рд╡рд╛ рд╕рдХрддрд╛ рд╣реВрдБ?
configservices рд╡рд┐рдзрд┐ рдФрд░ рдореЗрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдпрд╛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдРрдк, рдпрд╣ рд╕рдм рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП ConfigureServices рдпрд╛ Program рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХреБрдЫ рднреА рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

public static class Program
{
    public static void Main()
    {
        var services = new ServiceCollection();

        // TODO: Add your services to the collection. Here you could call your own ConfigureServices method

        var provider = services.BuildServiceProvider();

        // TODO: Get the services you need from the provider.
    }
}

рдпрджрд┐ рдЖрдк рдбреАрдПрдирдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк Microsoft.Extensions.PlatformAbstractions рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ IApplicationEnvironment рдФрд░ IRuntimeEnvironment рдкрдХрдбрд╝ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП PlatformServices. Default рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ IRuntimeEnvironment ред

рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛:

No service for type 'IMyService' has been registered.

рдпрд╣ рдХреЛрдб рд╣реИ:

            var services = new ServiceCollection();
            // Set up configuration sources.
            var builder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddEnvironmentVariables();
            Configuration = builder.Build();
            ConfigureServices(services);
            var provider = services.BuildServiceProvider();
            IMyService service = provider.GetRequiredService<IMyService>();

рдЕрдЧрд░ рдореИрдВ GetService рдХреЗ рд▓рд┐рдП GetRequiredService рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:

Unable to resolve service for type 'Microsoft.AspNet.Http.IHttpContextAccessor' while attempting to activate 'IMyService'.

@pepevc рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдкреНрд░рд╢реНрди, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА ConfigureServices рд╡рд┐рдзрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ Microsoft.AspNet.Http.IHttpContextAccessor рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝ рд░рд╣реА рд╣реИ? рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ ASP.NET рдореЗрдВ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдХрдВрд╕реЛрд▓ рдРрдк рд╣реИред

рдореИрдВ рдЦреЛрдЬ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдпрд╛ рдерд╛: рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ EntityFramework рдХреЛ рдЙрд╕ рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ ...

рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

рд╕рдВрдХреЗрдд: рд╡реАрдПрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдореВрд▓ рдХрдВрд╕реЛрд▓ рдРрдк рдореЗрдВ рдХреБрдЫ рдбреАрдЖрдИ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрд┐рд▓реНрдбрд░ред

@pepevc рдЙрд╕рдХреЗ рд▓рд┐рдП https://github.com/aspnet/EntityFramework/issues/ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░

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

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реЛрдЧрд╛, рдЙрд╕реА рддрд░рд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ WebApps (рдЦрд╛рд▓реА, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде, рдЖрджрд┐) рд╣реИред

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

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

@pepevc рдЖрдк рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рд╕реБрдЭрд╛рд╡ https://github.com/aspnet/Templates/issues/

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

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

tarekgh picture tarekgh  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

davidfowl picture davidfowl  ┬╖  24рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

prasannapattam picture prasannapattam  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

d0apga picture d0apga  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pauldotknopf picture pauldotknopf  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ