我目前有一个这样的基类:
public abstract class AbstractControllerBase<T> : Controller where T : AbstractControllerBase<T>
{
private ILogger<T> _logger;
protected ILogger<T> Logger => _logger ??= HttpContext.RequestServices.GetService<ILogger<T>>();
public AbstractControllerBase()
{ }
}
和这样的继承类:
public abstract class ControllerBase<T> : AbstractControllerBase<T> where T : ControllerBase<T>
{
private IRepository _repository;
protected IRepository Repository
{
get
{
if (_repository == null && HttpContext != null)
_repository = (IRepository)HttpContext.RequestServices.GetService(typeof(IRepository));
return _repository;
}
}
public ControllerBase()
{ }
public IActionResult CheckRedirectUrl(string url)
{
if (Url.IsLocalUrl(url))
{
var redirectResult = Redirect(url);
return redirectResult;
}
else
{
return RedirectToAction("Index", "Home");
}
}
}
有25个控制器继承自ControllerBase。如何在单元测试时初始化存储库。我试过这样做:
if (controller is Website.Controllers.ControllerBase < typeof(controller) >)
{
((Website.Controllers.ControllerBase)controller).Repository = repository;
}
但这也需要通用参数。请建议。