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>>());
    }
Другие вопросы по тегам