使用依赖注入初始化抽象类对象

Posted

技术标签:

【中文标题】使用依赖注入初始化抽象类对象【英文标题】:Initializing abstract class object using dependency injection 【发布时间】: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 友好的方式解决。 【参考方案1】:

请查看此主题,看看这是否回答了您的问题 - Registering implementations of base class with Autofac to pass in via IEnumerable

您必须适当地注册抽象类的子类。

【讨论】:

以上是关于使用依赖注入初始化抽象类对象的主要内容,如果未能解决你的问题,请参考以下文章

python 抽象类抽象方法接口依赖注入SOLIP

基础概念依赖注入

python 抽象类抽象方法接口依赖注入SOLIP

依赖注入

Android依赖注入Dagger的使用和源码解析(上篇)

Android 常用开源框架源码解析 系列 dagger2 呆哥兔 依赖注入库