繁体   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