初始化时出现Web.API Unity 3错误

时间:2014-03-25 11:27:51

标签: c# asp.net-mvc-4 asp.net-web-api unity-container

您好我一直在寻找使用Unity 3和Web.API项目的明确方法,我似乎只是碰壁砖并获得不起作用的示例,如果有人,我会非常感激可以指出一个明确的例子,因为那里的一切似乎已经过时了。 我有一个新创建的Web.API项目 然后我做了安装包Unity.WebAPI,这似乎安装了unity等,但没有BootStrapper.cs。但是我添加了UnityConfig.RegisterComponents();按照说明访问WebApiApplication文件。 看了看我然后运行install-package unity.mvc4这确实给了我bootstrapper.cs然后我遇到了重大问题,因为项目没有编译 错误1'xxxx.Web.API.Areas.HelpPage.XmlDocumentationProvider'未实现接口成员'System.Web.Http.Description.IDocumentationProvider.GetResponseDocumentation(System.Web.Http.Controllers.HttpActionDescriptor)'

我试图按如下方式实现它们 public string GetDocumentation(HttpControllerDescriptor controllerDescriptor)         {             throw new NotImplementedException();         }
和  public string GetResponseDocumentation(HttpActionDescriptor actionDescriptor)         {             throw new NotImplementedException();         }

我也明白了 警告1发现同一依赖程序集的不同版本之间存在冲突。在Visual Studio中,双击此警告(或选择它并按Enter键)以修复冲突;否则,将以下绑定重定向添加到应用程序配置文件中的“runtime”节点:

所以我然后单击消息来更新引用运行项目并获取 “通过方法'System.Web.Http.GlobalConfiguration..cctor()'尝试访问字段'System.Web.Http.GlobalConfiguration.CS $<> 9__CachedAnonymousMethodDelegate2'失败。”}

我真的不确定走哪条路?似乎在团结中如此笨拙,但实际上什么都没有用,当然我错过了什么?

2 个答案:

答案 0 :(得分:0)

以下是我在Unity中实施Web API的方法(注意:没有引导程序)。安装UnityConfig.cs后,您应该有一个Unity 3。它将位于您的App_Start文件夹中,并具有RegisterComponents()方法。我看起来像这样:

public static void RegisterComponents()
        {
            var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // Conventional registration mapping
            // container.RegisterType<IHomeService, HomeService>();

            // This will register all types with a ISample/Sample naming convention 
            container.RegisterTypes(
                AllClasses.FromLoadedAssemblies(),
                WithMappings.FromMatchingInterface,
                WithName.Default);          

            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }

您需要将此添加到Global.asax's Application_Start()方法中:

UnityConfig.RegisterComponents();

如果您想使用传统的映射路径,则需要将映射添加到RegisterComponent()方法。如果您遵循基于约定的方法,例如 Sample.cs 实现 ISample ,那么您就不必注册。您可以随时使用两种方式。

<强>更新

以下是 packages.config

中的Unity条目
<package id="Unity" version="3.0.1304.1" targetFramework="net45" />
<package id="Unity.WebAPI" version="5.1" targetFramework="net45" />

答案 1 :(得分:0)

感谢您的帮助,它有点似乎有些不一致,我现在终于解决了这个问题,所以这些是我遵循的步骤。

确保以管理员身份运行VS以避免程序包错误

运行 更新包以确保所有包都是最新的 当被要求时 File&#39; Areas \ HelpPage \ Views_ViewStart.cshtml&#39;已存在于项目&#39; ItsSorted.WebApi&#39;。你想覆盖它吗? [Y]是[A]是全部[N]否[L]否全部[?]帮助(默认为&#34; N&#34;):a 使用A

更新web.config以停止剃刀错误

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

并添加

<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
 </dependentAssembly>

此时应用处于Unity状态

运行Unity安装 安装包Unity.WebAPI

痛苦的经历,但现在正在工作:)

忘记提及框架不是我用两个版本试过的问题