2017-08-03 82 views
2

一种方法是创建使用类继承,但是有没有其他方法可以重用我在另一个控制器中的一个控制器中创建的方法?ASP.NET核心 - 如何重用在另一个控制器中的一个控制器中创建的方法?

编辑:我应该使用这样的自定义基础控制器吗?


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 
    } 


} 

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(); 
    } 
} 
+2

你不想这样做。 – CSharper

+0

这可能会有帮助。 https://softwareengineering.stackexchange.com/questions/264392/is-a-good-practice-to-call-a-controller-function-from-another-controller。如果你仍然坚持,那么更干净的方法是使用“RedirectToAction”。 –

回答

5

有几个方面我们要摸:

  • ,如果您有代码是在所有控制器有用,大部分时间它是很好的做法创建BaseApiController,它将从ApiController继承,并将在所有控制器中使用的东西放在那里。 (你也继承你的控制器,当然类)

  • 如果代码是某种业务逻辑,并不严格地说与处理http请求的方式有关(即你有模型Square并且你想计算区域并从控制器方法返回)。事情是这样的,你要重构特定服务这可能是也可能不是模型,热忱的服务,静态类或完全不同的东西

+0

有些方法需要查询数据库,所以从你所说的我应该使用一个自定义的基本控制器,看我的例子是对的? – 001

+1

@ 001 - 对我来说很好 – vittore

0

通常当你找到你想要在两个地方使用的东西它是一个候选人将转入自己的班级。然后两个控制器都可以使用普通类。

相关问题