我正在尝试在具有NancyFX
/ TinyIOC
的项目上实现选项模式(根据建议的here),但是它不起作用。
我正在Startup.cs.ConfigureServices
方法上注册选项,但是当我尝试将设置注入类TinyIoc
时会抛出:
Nancy.TinyIoc.TinyIoCResolutionException:无法解析类型:AppSettings。
我认为这是因为选项模式使用Microsoft.Extensions.DependencyInjection
但Nancy
使用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/