2017-08-03 78 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

通常當你找到你想要在兩個地方使用的東西它是一個候選人將轉入自己的班級。然後兩個控制器都可以使用普通類。

相關問題