【发布时间】:2017-07-14 03:58:26
【问题描述】:
我正在继承 ApiController,下面是我使用依赖注入重写的 ExecuteAsync 方法,
public abstract class BaseController : ApiController
{
private IMyService _myService;
public PersonModel person;
protected BaseController(IMyService myService)
{
_myService = myService;
}
public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
{
_myService.Initialize(person);
}
}
这是我的服务接口,
public interface IMyService
{
HttpResponseMessage Initialize(PersonModel person);
}
这是课程,
public class MyService : IMyService
{
public HttpResponseMessage Initialize(PersonModel person)
{
//Initializing person model from db
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
当我执行这个方法时,BaseController 类中的 person 对象仍然为空。我应该改变什么来初始化抽象类中的对象?
【问题讨论】:
-
我猜你正在按照
person = new PersonModel()内部Initialize的方式做一些事情。那根本行不通。你需要它来返回一个人模型,或者(一个丑陋的解决方法),使用ref。 -
你使用的是哪个依赖框架?
-
@ArunGeorge Autofac
-
您使用运行时数据 (
PersonModel) 初始化应用程序组件 (IMyService)。 This is anti-pattern. -
简单地说,never use a base class in MVC or WebApi when using DI。这可以通过使用global filter 初始化数据以对 DI 友好的方式解决。
标签: c# dependency-injection abstract-class