IOptions не работает с TinyIOC/NancyFX
Я пытаюсь реализовать шаблон параметров (как рекомендуется здесь) в проекте с NancyFX
/TinyIOC
но это не работает
Я регистрирую Опции на Startup.cs.ConfigureServices
метод, но когда я пытаюсь ввести настройки в моем классе TinyIoc
броски:
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: AppSettings.
Я думаю, что это потому, что шаблон параметров использует Microsoft.Extensions.DependencyInjection
но Nancy
использования TinyIoc
по умолчанию так TinyIoc
пытается решить IOptions<AppSettings>
и терпит неудачу.
Есть ли способ использовать IOptions<>
с TinyIoc
?
Вот мой код:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}
MyService.cs
public SearchService(IOptions<AppSettings> config)
{
}
Ошибка:
Исключение при запуске приложения: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова.
System.InvalidOperationException: что-то пошло не так при попытке удовлетворить одну из зависимостей во время компоновки, убедитесь, что вы зарегистрировали все новые зависимости в контейнере, и осмотрите inrerexception для получения дополнительной информации.
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: Nancy.NancyEngine
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: Nancy.Routing.DefaultRequestDispatcher
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: Nancy.Routing.DefaultRouteResolver
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: Nancy.Routing.RouteCache
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: MyProject.MyService
Nancy.TinyIoc.TinyIoCResolutionException: невозможно разрешить тип: Microsoft.Extensions.OptionsModel.IOptions`1[[MyProject.AppSettings, MyProject, Version=1.0.0.0, культура = нейтральная, 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"
},
Версия исполнения DNX:
1.0.0-rc1-update1 mono
Большое спасибо.
1 ответ
На самом деле я нашел ответ. Мне пришлось создать собственный загрузчик и зарегистрировать разрешенную зависимость от TinyIoc:
Startup.cs:
public void Configure(IApplicationBuilder app)
{
app.UseOwin(x => x.UseNancy(new NancyOptions
{
Bootstrapper = new CustomBootstrapper(app)
}));
}
CustomBootstrapper.cs:
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register<IOptions<AppSettings>>(_app.ApplicationServices.GetService<IOptions<AppSettings>>());
}