unity容器-如何创建一个与OWIN启动类一起工作的unitynancybootstrapper语言 - 实现



我正在尝试创建一个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>();

最新更新