1

我创建了一个 servicestack MVC 项目,我将其用作数据库的主要 API。因为我想在我的代码中访问模型,所以我还在我的 MVC Views Project 和 Controllers 项目中添加了对该项目的引用。

但是,当我运行我的项目 [网站项目] 时,我遇到了真正的问题,ServiceStack 认为它拥有我的解决方案,并接管了所有请求,然后无法解决我的路线。

我已经在 web 项目全局文件中添加了路由,我也尝试将这些路由添加到 servicestack 项目,但仍然无法解决。

这是错误:

[ResolutionException: Required dependency of type      uyr.print.controllers.Controllers.UsersController could not be resolved.]
    Funq.Container.ThrowMissing(String serviceName) in        C:\src\ServiceStack\src\ServiceStack\Funq\Container.cs:297
   Funq.Container.GetEntry(String serviceName, Boolean throwIfMissing) in C:\src\ServiceStack\src\ServiceStack\Funq\Container.cs:275
   Funq.Container.ResolveImpl(String name, Boolean throwIfMissing) in C:\src\ServiceStack\src\ServiceStack\Funq\Container.cs:112
  Funq.Container.ResolveNamed(String name) in C:\src\ServiceStack\src\ServiceStack\Funq\Container.Overloads.cs:283
  Funq.Container.Resolve() in C:\src\ServiceStack\src\ServiceStack\Funq\Container.Overloads.cs:230
   lambda_method(Closure , Container ) +41
    ServiceStack.ServiceHost.ContainerResolveCache.CreateInstance(Type type, Boolean tryResolve) in C:\src\ServiceStack\src\ServiceStack\ServiceHost\ContainerResolveCache.cs:62
   ServiceStack.ServiceHost.ContainerResolveCache.CreateInstance(Type type) in C:\src\ServiceStack\src\ServiceStack\ServiceHost\ContainerResolveCache.cs:37
   ServiceStack.Mvc.FunqControllerFactory.GetControllerInstance(RequestContext   requestContext, Type controllerType) in   C:\src\ServiceStack\src\ServiceStack.FluentValidation.Mvc3\Mvc\FunqControllerFactory.cs:38
    System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +232
   System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49
   System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970356
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

如果有人能在这里指出我正确的方向,将不胜感激。

谢谢

4

2 回答 2

2

在那个 ServiceStack 认为它拥有我的解决方案,并接管所有请求,然后无法解析我的路线。

ServiceStack 不拥有任何你没有明确告诉它的东西。

ServiceStack ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container));

这告诉 MVC 使用 ServiceStack 内置的 Funq IOC 来解析和自动连接所有 MVC 控制器。通常,如果您在同一个项目中同时运行 ServiceStack + MVC,您希望使用相同的 IOC 来解决 ServiceStack 服务和 MVC 控制器依赖关系。

如果您不希望 MVC 控制器使用 ServiceStack 的 IOC,请取消注释该行。

处理程序路径配置

在 Web.config 中,您还可以准确地告诉 ServiceStack您希望 ServiceStack 处理什么路径

这是仅有的两个配置 ServiceStack 来处理请求的地方。如果您没有任何这些配置,那么 ServiceStack dll 是良性的,不会对您的项目产生任何影响。即没有注册的 HTTP 模块侵入性地尝试劫持请求。

这里唯一存在该问题的库是 MVC,它认为它拥有整个解决方案,即使在告诉 IIS 将所有/api请求委托给 ServiceStack(使用 Web.Config)之后,您还需要告诉 MVC 显式忽略这些路由:

routes.IgnoreRoute("api/{*pathInfo}"); 

否则它将尝试处理它们。

于 2012-08-05T17:20:40.167 回答
0

看来您正在使用Funq DI container。它试图找到你在 Funq 初始化期间没有创建的依赖项。在不知道 Funq 是如何工作的(以前从未听说过)或你的代码库是什么样子的情况下,这对我们目前来说是很有帮助的。

于 2012-08-05T12:06:48.677 回答