我正在尝试创建一个Nancy/Unity-bootstrapper,它可以与OWIN-startup-class一起工作,就像这里描述的那样:
最小示例:使用Owin自托管Nancy, Unity引导程序包括xUnit测试
public class Startup
{
public void Configuration(IAppBuilder app)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<IMessageHelper, MessageHelper>();
app.UseNancy(new NancyOptions
{
EnableClientCertificates = true,
Bootstrapper = new NancyOwinBoxBootstrapper(container)
});
}
}
public class NancyOwinBoxBootstrapper : UnityNancyBootstrapper
{
private IUnityContainer _container;
public NancyOwinBoxBootstrapper(IUnityContainer container)
{
_container = container;
}
protected override IUnityContainer GetApplicationContainer()
{
return _container;
}
}
NancyOwinBox.zip中的示例可以正常工作,但它是基于nancy . bootstrapers . unity 1.1版本的。当我将NuGet包升级到最新版本(1.2)时,示例失败:
解析依赖项失败,type = "Nancy.Bootstrapper。", name = " nancy . viewengine . viewengineapplicationstartup "。解析。
时发生异常异常是:InvalidOperationException -当前类型,System.Collections.Generic.IEnumerable ' 1[Nancy.ViewEngines. view]。IViewEngine]是一个接口,不能被构造。您是否错过了类型映射?
异常发生时,容器为:
解决Nancy.ViewEngines.ViewEngineApplicationStartup Nancy.ViewEngines。ViewEngineApplicationStartup(从Nancy.Bootstrapper映射)。IApplicationStartup Nancy.ViewEngines.ViewEngineApplicationStartup)解析构造函数Nancy.ViewEngines.ViewEngineApplicationStartup(System.Collections.Generic)的参数"viewEngines"。IEnumerable 1[[Nancy.ViewEngines.IViewEngine, Nancy, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null]] viewEngines, Nancy.ViewEngines.IViewCache viewCache, Nancy.ViewEngines.IViewLocator viewLocator)
Resolving System.Collections.Generic.IEnumerable
1[nancy . viewengine . iviewengine],(none)
当前类型,System.Collections.Generic.IEnumerable ' 1[Nancy.ViewEngines. view]。IViewEngine]是一个接口,不能被构造。您是否错过了类型映射?
有人知道为什么会发生这个错误吗?
需要在容器中注册EnumerableExtension
,如下所示:
container.AddNewExtension<EnumerableExtension>();