我正在尝试在具有NancyFX / TinyIOC的项目上实现选项模式(根据建议的here),但是它不起作用。

我正在Startup.cs.ConfigureServices方法上注册选项,但是当我尝试将设置注入类TinyIoc时会抛出:


  Nancy.TinyIoc.TinyIoCResolutionException:无法解析类型:AppSettings。


我认为这是因为选项模式使用Microsoft.Extensions.DependencyInjectionNancy使用TinyIoc作为默认值,因此TinyIoc尝试解析IOptions<AppSettings>并失败。

有没有办法将IOptions<>TinyIoc一起使用?

这是我的代码:

启动文件

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.TinyIoc.TinyIoCResolutionException:无法解析类型:
  MyProject.MyService
  
  Nancy.TinyIoc.TinyIoCResolutionException:
  无法解析类型:
  Microsoft.Extensions.OptionsModel.IOptions`1 [[MyProject.AppSettings,
  MyProject,版本= 1.0.0.0,文化=中性,PublicKeyToken =空]]


一些额外的信息:

"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>>());
    }

关于c# - IOptions无法与TinyIOC/NancyFX一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34991016/

10-10 13:02