首页 新闻 搜索 专区 学院

ASP.NET Core 依赖注入问题:如何给指定的 Controller 注入特定的接口实现

0
悬赏园豆:50 [待解决问题]

比如这样一个控制器:

public class AntiAdController : Controller
{
    private readonly ICheckService _checkService;

    public AntiAdController(ICheckService checkService)
    {
        _checkService = checkService;
    }
}

Startup 中已经给 ICheckService 接口注册了一个默认实现,请问如何单独给这个 Controller 注册另外一个 ICheckService 的实现?

dudu的主页 dudu | 高人七级 | 园豆:38804
提问于:2019-10-26 15:12

找到一个基于 Autofac 的解决方法,详见 https://stackoverflow.com/a/48308516/5989202

dudu 11个月前
< >
分享
所有回答(3)
0

services.addxontrollerassercice().addscope(adtiadcontroller,sp=>new adtiadcontroller(sp.getservice<mychecksercice>))

试试看,类似的code,应该可以

czd890 | 园豆:9127 (大侠五级) | 2019-10-27 11:43
1
zengande | 园豆:211 (菜鸟二级) | 2019-10-28 15:12
0

最终采用的解决方法如下:

1)新增一个 IAdCheckService 接口继承 ICheckService 接口

public interface IAdCheckService : ICheckService
{
}

2)类 AdCheckService 实现 IAdCheckService 接口并实现 ICheckService 接口的 Check 方法

public class AdCheckService : IAdCheckService
{
    public async Task<CheckStatus> Check(Checkee checkee)
    {
        //... 
    }
}

3)Startup 中注册

services.AddTransient<IAdCheckService, AdCheckService>();

4)AntiAdController 只需将构造函数的参数类型改为 IAdCheckService ,其他都不变。

public class AntiAdController : Controller
{
    private readonly ICheckService _checkService;

    public AntiAdController(IAdCheckService checkService)
    {
        _checkService = checkService;
    }
}
dudu | 园豆:38804 (高人七级) | 2019-11-02 15:09

这个方法好,不会对原有的实现造成干扰。

支持(0) 反对(0) 灯塔下的守望者 | 园豆:118 (初学一级) | 2019-11-02 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册