рдореИрдВ рд╡рд┐рдХрд▓реНрдк рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ: 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
рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдЖрдк IOptions рдХреЛ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:
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.Extensions.OptionsModel.IOptions
рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ рддреЛ рдЙрд╕реЗ "рдЬрд╡рд╛рдм" рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдерд╛, рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ, рдпрд╛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ GetService рдХрд╛рд░рдЦрд╛рдиреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрд░реЗ, рдЕрдм рдореБрдЭреЗ рд╡рд╣реА рдорд┐рд▓рд╛ рдЬреЛ рдЖрдкрдиреЗ рдХрд╣рд╛, рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛! рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЗрдВ IApplicationBuilder
рднреЗрдЬрд╛ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ IOptions<AppSettings>
рдХреЛ ApplicationServices.GetService()
рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ TinyIoc рдореЗрд░реА рд╕реЗрд╡рд╛ рдФрд░ Microsoft.Extensions.DependencyInjection
рдмреАрдЪ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред
@RTodorov рдПрдХ рдиреИрдиреНрд╕реА рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ TinyIoC рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ Microsoft.Extensions.DependencyInjection
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@RTodorov рдПрдХ рдиреИрдиреНрд╕реА рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ TinyIoC рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ
Microsoft.Extensions.DependencyInjection
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред