服务堆栈angularjs与ravendb,正确的方法

本文关键字:方法 ravendb 堆栈 angularjs 服务 | 更新日期: 2023-09-27 18:30:11

我创建了服务堆栈angularjs与模板应用程序。最初我有

•   X.AngularJS
•   X.AngularJS.ServiceInterface
•   X.AngularJS.ServiceModel
•   X.AngularJS.Tests

我使用RavenDb作为数据存储。在X.AngularJS上有一个AppHost.cs配置对象,我在其中定义DocumentStore和对数据库的访问。

public override void Configure(Container container)
{
   var store = new DocumentStore()
   {
       Url = "http://...",
       DefaultDatabase = "somedb"
   }.Initialize();
   ...
}

现在,如果我在这个项目(X.AngularJS)中创建服务实例(MySimpleService.cs),一切都可以,我可以访问IDocumentSession,我将使用它来检索数据。

然而,不建议使用这种方法(至少从我的角度来看),为什么要使用X.AngularJS.ServiceModel项目我还研究了http://razor.servicestack.net/,其中服务与AppHost.cs一起嵌入到单个项目中。

因此,我将遵循这4个项目模板(从vs服务堆栈angularjs模板开箱即用创建)。考虑到这一点,你能建议我如何使用(在最基本的例子中)X.AngularJS.ServiceModelX.AngularJS吗使用ravendb数据库。

服务堆栈angularjs与ravendb,正确的方法

以下是我建议使用带有AngularJS模板的ServiceStackASP.NET的方法,该模板与Visual Studio的ServiceStackVS插件一起安装。我将使用在使用模板生成代码时默认使用的项目名称。

  • AngularJSWebApp1:这是客户端AngularJS项目。它确实有一些ASP.NET代码(即default.cshtml、Global.asax),但这些代码仅用于管理布局。default.cshtml中定义的AngularJS应用程序是一个完整的客户端应用程序——它返回服务器的唯一途径是获取数据(通过/helloURI)。此项目与ServiceStack Web服务项目之间的所有通信都应通过AngularJS代码启动。

  • AngularJSWebApp1.ServiceInterface:该项目定义服务(即,一旦Web服务收到特定请求,该怎么办)。在默认项目的情况下,响应是一个简单的字符串。然而,这是您想要调用数据库的地方(在您的情况下是RavenDB)。

  • AngularJSWebApp1.ServiceModel:该项目定义请求和响应对象,并将它们映射到特定的URI路由。例如,当一个请求到达URI/hello/user1765862时,ServiceStack将实例化一个新的hello类,并将Name属性设置为"user176586 2"。然后,这个Hello对象实例将被传递给AngularJSWebApp1.ServiceInterface.MyServices.Any()方法。

  • AngularJSWebApp1.Tests:该项目演示了如何对服务进行单元测试。

请注意依赖链。CCD_ 10是CCD_。后者需要前者中定义的类的实例,以便对请求对象执行操作。CCD_ 12和CCD_ 13都是CCD_。由于这是唯一的ASP.NET项目,因此它被用于托管AngularJS应用程序和ServiceStack Web服务。请注意Web.config文件中的<httpHandlers>部分。