簡體   English   中英

與TinyIOC / NancyFX無關的IOptions

[英]IOptions not working with TinyIOC/NancyFX

我試圖執行選項模式(推薦在這里 )與項目NancyFX / TinyIOC ,但它不工作。

我在Startup.cs.ConfigureServices方法上注冊了選項,但是當我嘗試在我的類上注入設置時, TinyIoc拋出:

Nancy.TinyIoc.TinyIoCResolutionException:無法解析類型:AppSettings。

我認為這是因為選項模式使用Microsoft.Extensions.DependencyInjectionNancy使用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:嘗試在組合期間滿足其中一個依賴項時出錯,請確保已在容器中注冊所有新依賴項並檢查innerexception以獲取更多詳細信息。

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,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"
},

DNX運行時版本:

1.0.0-rc1-update1    mono

非常感謝你。

其實我找到了答案。 我必須創建一個自定義引導程序並在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>>());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM