1

データベースのメイン API として使用する servicestack MVC プロジェクトを作成しました。コード内のモデルにアクセスしたいので、MVC Views Project および Controllers プロジェクトにこのプロジェクトへの参照も追加しました。

ただし、プロジェクト [Web サイト プロジェクト] を実行すると、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(新しい FunqControllerFactory(コンテナ));

これにより、ServiceStack 組み込みの Funq IOC を使用して、すべての MVC Controllersを解決および自動配線するように MVC に指示されます。通常、同じプロジェクトで ServiceStack + MVC を一緒に実行している場合、同じ IOC を使用して ServiceStack サービスと MVC コントローラーの依存関係を解決します。

MVC コントローラーで ServiceStack の IOC を使用したくない場合は、その行のコメントを外します。

ハンドラ パスの設定

Web.config では、ServiceStack に処理させたいパスを ServiceStack に正確に伝えます。

これらは、ServiceStack がリクエストを処理するように構成されている 2 つの場所のみです。これらの構成のいずれも持っていない場合、ServiceStack dll は無害であり、プロジェクトに影響を与えません。つまり、侵略的にリクエストをハイジャックしようとする HTTP モジュールは登録されていません。

ここでその問題がある唯一のライブラリは MVC であり、ソリューション全体を所有していると考えられます。IIS にすべての/apiリクエストを ServiceStack に委任するように (Web.Config を使用して) 指示した後でも、これらのルートを明示的に無視するように MVC に指示する必要があります。

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

それ以外の場合は、それらを処理しようとします。

于 2012-08-05T17:20:40.167 に答える
0

Funq DI コンテナーを使用しているようです。Funq の初期化中に作成されていない依存関係を見つけようとしています。Funq がどのように機能するか (今まで聞いたことがない)、またはコード ベースがどのように見えるかを知らなくても、今のところはそれで十分です。

于 2012-08-05T12:06:48.677 に答える