我已经创建了一个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
如果有人能在这里指出我正确的方向,那将非常感激。
感谢
答案 0 :(得分:2)
该ServiceStack认为它拥有我的解决方案,并接管所有请求,然后无法解析我的路由。
ServiceStack不拥有您没有明确指出的任何内容。
ServiceStack ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(容器));
这告诉MVC使用ServiceStack内置的Funq IOC解析并自动连接所有MVC控制器。通常,如果您在同一个项目中一起运行ServiceStack + MVC,则希望使用相同的IOC来解析ServiceStack服务和MVC Controller依赖项。
如果您不希望MVC控制器使用ServiceStack的IOC,请取消注释该行。
在Web.config中,您还可以告诉ServiceStack exactly what path you want ServiceStack to handle。
这些是ServiceStack配置为处理请求的唯一两个地方。如果您没有任何这些配置,那么ServiceStack dll是良性的,并且对您的项目没有任何影响。即没有注册的HTTP模块有侵略性地尝试hi-jack请求。
这个问题的唯一库是MVC,它认为它拥有整个解决方案,即使告诉IIS将所有/api
请求委托给ServiceStack(使用Web.Config),你还需要告诉MVC明确忽略这些路线:
routes.IgnoreRoute("api/{*pathInfo}");
否则会尝试处理它们。
答案 1 :(得分:0)
您似乎正在使用Funq DI container。它试图找到你在Funq初始化期间没有创建的依赖项。不知道Funq是如何工作的(以前从未听说过)或者你的代码库看起来是什么样的,这对我们现在的情况非常有帮助。