ASP.NET核心 - 如何重用在另一个控制器中的一个控制器中创建的方法?

001*_*001 2 c# inheritance class asp.net-core

一种方法是创建使用类继承,但是有没有其他方法可以重用我在另一个控制器中的一个控制器中创建的方法?

编辑:我应该使用像这样的自定义basecontroller吗?


public class BaseController : Controller
{
    private readonly ApplicationDbContext _context;
    private readonly IIdentityService _identityService;

    public BaseController(ApplicationDbContext context, IIdentityService identityService)
    {
        _context = context;
        _identityService = identityService;
    } 

    public BaseController()
    {
    }

     //reusable methods
     public async Task<Account> GetAccount()
     {
        //code to do something, i.e query database
     }


}
Run Code Online (Sandbox Code Playgroud)
public class MyController : BaseController
{
    private readonly ApplicationDbContext _context;
    private readonly IIdentityService _identityService;

    public MyController(ApplicationDbContext context, IIdentityService identityService)
    {
        _context = context;
        _identityService = identityService;
    } 

    public async Task<IActionResult> DoSomething()
    {

      var account = await GetAccount(); 

      //do something

      Return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

vit*_*ore 7

我们想要触及几个方面:

  • 如果您拥有的代码在所有控制器中都很有用,那么大多数情况下创建BaseApiController是很好的做法,它将继承ApiController并将所有控制器中使用的东西放在那里.(你也从那个类继承你的控制器)

  • 如果代码是某种业务逻辑,并且严格来说并不是以某种方式处理http请求(即你有模型Square并且你想要计算区域并从控制器方法返回它).像你想要重构特定服务的东西,可能是也可能不是模型,专用服务,静态类或完全不同的东西