Nancy: рдиреИрдиреНрд╕реА/TinyIoc рдХреЗ рд╕рд╛рде IOptions рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЬрдире░ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: NancyFx/Nancy

рдореИрдВ рд╡рд┐рдХрд▓реНрдк рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ: https://docs.asp.net/en/latest/fundamentals/configuration.html#options-config-objects) NancyFX / TinyIOC рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд╛рдо рдореЗрдВ рд╣реЛред

рдореИрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк.рд╕реАрдПрд╕/рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдХрд▓реНрдк рдкрдВрдЬреАрдХреГрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ TinyIoc рдиреИрдиреНрд╕реА рдлреЗрдВрдХрддрд╛ рд╣реИред TinyIoc.TinyIoCResolutionException: рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде: AppSettings.

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдХрд▓реНрдк рдкреИрдЯрд░реНрди Microsoft.Extensions.рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдиреИрдиреНрд╕реА TinyIoc рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП TinyIoc IOptions рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

рдХреНрдпрд╛ TinyIoc рдХреЗ рд╕рд╛рде IOptions<> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐, рдХреНрдпрд╛ рдореИрдВ TinyIoc рдХреЛ MS DependencyInjection рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдБ?

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк.рд╕реАрдПрд╕:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}

MyService.cs:

public SearchService(IOptions<AppSettings> config)
{
}

рддреНрд░реБрдЯрд┐:

Application startup exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Something went wrong when trying to satisfy one of the dependencies during composition, make sure that you've registered all new dependencies in the container and inspect the innerexception for more details. ---> Nancy.TinyIoc.TinyIoCResolutionException: Unable to resolve type: Nancy.NancyEngine ---> Nancy.TinyIoc.TinyIoCResolutionException: Unable to resolve type: Nancy.Routing.DefaultRequestDispatcher ---> Nancy.TinyIoc.TinyIoCResolutionException: Unable to resolve type: Nancy.Routing.DefaultRouteResolver ---> Nancy.TinyIoc.TinyIoCResolutionException: Unable to resolve type: Nancy.Routing.RouteCache ---> Nancy.TinyIoc.TinyIoCResolutionException: Unable to resolve type: MyProject.MyService ---> Nancy.TinyIoc.TinyIoCResolutionException: Unable to resolve type: Microsoft.Extensions.OptionsModel.IOptions 1[[MyProject.AppSettings, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]``

рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:

"dependencies": {
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.Owin": "1.0.0-rc1-final",
    "Nancy": "1.4.3",
    "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4",
    "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta4",
    "Microsoft.Extensions.OptionsModel": "1.0.0-rc1-final"
},

рдбреАрдПрдирдПрдХреНрд╕ рд░рдирдЯрд╛рдЗрдо рд╕рдВрд╕реНрдХрд░рдг:

1.0.0-rc1-update1 mono

рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

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

@RTodorov рдПрдХ рдиреИрдиреНрд╕реА рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ TinyIoC рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ Microsoft.Extensions.DependencyInjection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЖрдк IOptions рдХреЛ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВрдиреИрдиреНрд╕реА рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХрд╣реАрдВ рднреА рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рдЬрд╛рджреВ "services.Configure" рдХреНрдпрд╛ рд╣реИ(рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рдЧреЗрдЯрд╕реЗрдХреНрд╢рди ("рдРрдкрд╕реЗрдЯрд┐рдВрдЧ"));" рд╣реБрдб рдХреЗ рддрд╣рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдиреИрдиреНрд╕реА рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  • рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рдмрдирд╛рдирд╛, IOptions рдкрд╛рд╕ рдХрд░рдирд╛рдЕрдкрдиреЗ рд╕реАрдЯреАрдЖрд░ рдореЗрдВ, рдЙрд╕ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╣рд╛рдВ рдЖрдк рдиреИрдиреНрд╕реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдХрд┐ ConfigureApplicationContainer рдореЗрдВ
  • рдпрджрд┐ рдЖрдк рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдКрдкрд░ рдЬреИрд╕рд╛ рд╣реА рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдирдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП TinyIocContainer рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рдореЗрдВ GetApplicationContainer рдХреЗ рд▓рд┐рдП рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

Nancy.TinyIoc.TinyIoCContainer.Current.Register(typeof(IOptions<>), typeof(OptionsManager<>));

рдХреМрди рд╕рд╛ BTW рд╣реИ рдЬреЛ services.AddOptions(); Microsoft.Extensions.DependencyInjection рд▓рд┐рдП рд╣реБрдб рдХреЗ рддрд╣рдд рдХрд░рддрд╛ рд╣реИ

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдпрд╣ рдорддрд▓рдм рд╣реИ?

services.Configure() рд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓реЗрдЧрд╛ рдФрд░ MS DI рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдЧрд╛ рдЬрдм рдХрд┐рд╕реА рдХреЛ рдРрдкрд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╕реНрдЯрдо рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкрд░ рдЬреЛрдбрд╝рд╛:

container.Register<IOptions<ElasticSearchConfig>, OptionsManager<ElasticSearchConfig>>();

рдФрд░ рдЕрдм рддреНрд░реБрдЯрд┐ рдЕрдм рдФрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡рд╕реНрддреБ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд╕рд╣реА рдЖрдмрд╛рджреА рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рдПрдЧрд╛:

`рд╡рд░ рдРрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ = рдРрдкред рдПрдкреНрд▓реАрдХреЗрд╢рди рд╕рд░реНрд╡рд┐рд╕реЗрдЬред рдЧреЗрдЯ рд╕рд░реНрд╡рд┐рд╕>();``

рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рдПрдЧрд╛:

var appSettings = Nancy.TinyIoc.TinyIoCContainer.Current.Resolve<IOptions<AppSettings>>();

рдлрд┐рд░ рднреА, рдЬрдм рдореИрдВ IOptions рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдБ рддреЛ TinyIoc Ms Framework DI рдХреА рдЬрдЧрд╣ рд▓реЗ рд░рд╣рд╛ рд╣реИ. рдореИрдВрдиреЗ рдпрд╣ рднреА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╕рднреА Microsoft.* dll TinyIoc рдХреА рдЗрдЧреНрдиреЛрд░ рд╕реВрдЪреА рдореЗрдВ рд╣реИрдВ, рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ Microsoft.Extensions.OptionsModel.IOptions рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ рддреЛ рдЙрд╕реЗ "рдЬрд╡рд╛рдм" рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

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

рдЕрд░реЗ, рдЕрдм рдореБрдЭреЗ рд╡рд╣реА рдорд┐рд▓рд╛ рдЬреЛ рдЖрдкрдиреЗ рдХрд╣рд╛, рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛! рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЗрдВ IApplicationBuilder рднреЗрдЬрд╛ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ IOptions<AppSettings> рдХреЛ ApplicationServices.GetService() рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ TinyIoc рдореЗрд░реА рд╕реЗрд╡рд╛ рдФрд░ Microsoft.Extensions.DependencyInjection рдмреАрдЪ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред

@RTodorov рдПрдХ рдиреИрдиреНрд╕реА рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ TinyIoC рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ Microsoft.Extensions.DependencyInjection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

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

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

juniormayhe picture juniormayhe  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jgillich picture jgillich  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

phillip-haydon picture phillip-haydon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ