AutoFac / Unity容器-具有多种实现的依赖注入

问题描述

我将为ASP.NET Web API项目使用依赖注入。

我了解构造函数依赖注入的工作原理,但是我无法解决如何使注入器在同一接口的两个实现之间进行选择。让我们举一个例子,我们有一个这样的接口:

public interface ISender
{
    void Send();
    void AddReceipment(User user);
}

然后可以说,我使用相同的SmsSender接口对此MailSenderISender进行了两种实现。

现在我有两个API控制器,可以将它们称为“ MailController”和“ SmsController”。

现在,我希望依赖注入器通过类ISender的实现将MailSender注入MailController,在SmsController中,我也希望注入ISender,但是通过实现类SmsSender

使用AutoFac或Unity容器是否可能?

如果是,那我该怎么处理?

解决方法

根据Autofac文档,您可以通过4个选项来实现:

  1. Redesign your interfaces
  2. Change the registrations
  3. Use keyed services
  4. Use metadata