在c#中调用超级构造函数
本文关键字:构造函数 调用 | 更新日期: 2023-09-27 18:18:48
我有类,如AccountsController, ProductsController等,都继承自BaseController。Unity会根据需要设置我的服务。这些类也都需要_sequence服务。因为这是所有类的共同要求,所以我想在BaseController中对其进行编码。
public class AccountsController : BaseController
{
public AccountsController(
IService<Account> accountService) {
_account = accountService;
}
public class ProductsController : BaseController
{
public ProductsController(
IService<Account> productService) {
_product = productService;
}
public class BaseController : Controller
{
public IService<Account> _account;
public IService<Product> _product;
protected ISequenceService _sequence;
public BaseController(
ISequenceService sequenceService) {
_sequence = sequenceService;
}
但是我该怎么做呢?我应该在每个AccountsController和ProductsController的构造函数中设置对BaseController的调用吗?
可以链接构造函数:
public class ProductsController : BaseController
{
public ProductsController(
IService<Account> productService) : base(productService)
{
_product = productService;
}
}
请注意,链接的BaseController
(使用base
关键字)已经传递了productService
参数,尽管这可以是任何东西。
你可以做以下(穷人的依赖注入):
public class ProductsController : BaseController
{
public ProductsController(
IService<Account> productService) : base(new SequenceService())
{
_product = productService;
}
}
或者,通过您的继承类型传递对ISequenceService
的依赖:
public class ProductsController : BaseController
{
public ProductsController(
IService<Account> productService, ISequenceService sequenceService)
: base(sequenceService)
{
_product = productService;
}
}