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>的实际处理的入口

 

 




posted @ 2025-01-02 18:11  生命体验之kevin-Y  阅读(5)  评论(0)    收藏  举报