简短答案将分为两种情况:
-
如果你想使用
ISomeService
public class AboutController : BaseController
{
private readonly IAboutService _aboutService;
public AboutController (IAboutService aboutService, ISomeService someService) : base(someService)
{
_aboutService = aboutService;
}
}
-
如果您不想使用该服务,请像这样使用默认的基本构造函数,否则,如果您尝试访问它,它将为null:
public class AboutController : BaseController
{
private readonly IAboutService _aboutService;
public AboutController (IAboutService aboutService) : base()
{
_aboutService = aboutService;
}
}
您处于第一个场景中,因此需要将其通过构造函数进行初始化!
但是,如果您想打破这种模式,您可以选择其他方式将服务注入到基本控制器中:
第一个是使用自动属性:
例如:
public ISomeService SomeService { get; set;}
DependecyResolver
但这会以某种方式“打破”DI模式,使测试变得更困难等。但如果你选择这样做,下面是代码:
public class BaseController : Controller
{
[Inject]
public IUnitOfWork UnitOfWork { get; set; }
private readonly ISomeService _someService ;
public BaseController(ISomeService someService)
{
_someService = someService;
}
public void Contacts()
{
contacts = _someService .GetById(1);
ViewBag.someThing = contacts; //Add whatever
}
public BaseController()
{
_someService = DependencyResolver.Current.GetService<ISomeService >();
}
}
有关更多信息,请参阅此问题
here