ravendb源代码学习一:服务启动
本质似乎就是一个asp.net core的httpapi
namespace Raven.Server { public sealed class RavenServerStartup { private RequestRouter _router; //部分代码 public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) {
_router = app.ApplicationServices.GetService<RequestRouter>(); app.Use(_ => RequestHandler); } private async Task RequestHandler(HttpContext context) { //... sp = Stopwatch.StartNew(); await _router.HandlePath(requestHandlerContext).ConfigureAwait(false); sp.Stop(); }
} }
RequestRouter 的初始化在
namespace Raven.Server { public sealed class RavenServer : IDisposable { public void Initialize() { Router = new RequestRouter(RouteScanner.AllRoutes, this); //... var webHostBuilder = new WebHostBuilder() .UseStartup<RavenServerStartup>() .ConfigureServices(services => { //... services.AddSingleton(Router); }
RouteScanner.AllRoutes的类一般都在Raven.Server.Documents.Handlers名字空间下
namespace Raven.Server.Documents.Handlers { public sealed class DocumentHandler : DatabaseRequestHandler { //.... [RavenAction("/databases/*/docs", "GET", AuthorizationStatus.ValidUser, EndpointType.Read)] public async Task Get() { using (var processor = new DocumentHandlerProcessorForGet(HttpMethod.Get, this)) { await processor.ExecuteAsync().ConfigureAwait(false); } }
这就是我们使用RavenDb.Client中Load<T>的实际处理的入口