簡體   English   中英

Rest API C# (ASP.NET Core) 中的設計問題

[英]Rest API design issues in C# (ASP.NET Core)

所以 iv 負責重構一個非常舊的代碼庫。 代碼絕對是一團糟,所有功能代碼都寫在 controller class 中,沒有服務類沒有存儲庫類(Controller 是 6000 行代碼)。

現在我已經開始創建服務類,當它們被調用時自動注入到 controller 方法中,如下所示:

[HttpGet]
[Route("")]
public IActionResult CheckAccessToServer([FromServices] CheckServerAccessService _checkServerAccessService)
        {
            return _checkServerAccessService.CheckAccessToServer(_env);
        }

但是當涉及到存儲庫類時,我找不到任何傳統/好的方法來做這件事。 我習慣於使用 spring/JPA/Annotations 但在 C#(Net core)中我真的不知道如何以好的方式做到這一點。 這是服務 class(僅相關部分)的示例,它使用存儲庫 class,使用“新建”創建每個存儲庫 class,我認為它看起來很糟糕。

public dynamic ApiMapper(string method, dynamic paramsObject, DbContext db)
        {
            HelpMethods.GetNetworkTimeStamp("Start", 2);
            dynamic returnData = null;
            string error = null;

            switch (method)
            {
                case "getservicelocations":
                    returnData = new ServiceLocationsRepository(db).GetServicelocations();
                    break;
                case "getstationsinservicelocation":
                    returnData = new StationsRepository(db).GetStationsInServiceLocation(paramsObject);
                    break;
                case "addstation":
                    returnData = new StationsRepository(db).AddStation(paramsObject);
                    break;
                case "updatestation":
                    returnData = new StationsRepository(db).UpdateStation(paramsObject);
                    break;
                default:
                    error = "Unknown method";
                    break;
            }

正如您所注意到的,自動注入到 controller 中的 DB object 被發送,並且每個 repo 都是使用前面提到的“New”語句制作的? 有什么辦法可以清理干凈嗎? 我可以將數據庫自動注入到服務類中嗎?如何? 我可以通過自動注入在服務中創建回購類嗎?如果可以,如何創建?

“我可以將數據庫自動注入到服務類中嗎?如何?”

是的,如果您像這樣在啟動 class 中添加了 DbContext:

services.AddDbContext<YourDbContext>

然后你可以在任何服務、回購、controller 等中注入“YourDbContext”。

一個建議是不使用“ApiMapper”,而是為每個回購類(ServiceLocationsRepository、StationsRepository 等)創建接口,然后在啟動 class 中注冊這些接口,然后將它們注入到您的服務類中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM