Unity容器使用具有多个实现

时间:2017-03-06 16:55:58

标签: unity-container

我提出了一个问题,如果只处理单个接口实例,Unity Container或NInject的用法是什么。

Ex:一般我们这样使用

 
   Public Class IEmailSender
    {
       Public Void SendEmail();
    }
    Public Class SMTP: IEmailSender
    {
        Public Void SendEmail()
        {
             // Send Email Logic using SMTP
        }
    }
    Public Class OtherSender: IEmailSender
    {
        Public Void SendEmail()
        {
             // Send Email Logic for Other Sender
        }
    }
    Public Class Builder
    {
      Public Static IEmailSender CreateBuilder(string senderType)
         {
              if(senderType.Equals("SMTP"))
               {
                   Return New SMTP();
               }            
            ElseIf(senderType.Equals("OTHER"))
              {
                     Return New OtherSender();
              }
         }
    }

在我的屏幕上有两个按钮  #1。从SMTP发送 - 事件(EventArgs)  #2。从其他发件人发送 - 事件(EventArgs)

在两种方法中使用相同的逻辑

   IEmailSender emailSender = Builder.CreateBuilder(button.CommandArgument)
   emailSender.sendEmail();

那么,如何使用Unity Block中的Unity Configuration处理这些不同的场景

或NInject Binder,

您的反馈将非常值得赞赏。

1 个答案:

答案 0 :(得分:0)

在Unity中,您可以使用命名实例来注册和检索单个接口的不同实现。 首先您需要使用apriopriate名称向接口注册具体类型:

var container = new UnityContainer();
container.RegisterType<IEmailSender, SmtpSender>("SMTP");
container.RegisterType<IEmailSender, OtherSender>("OTHER");

在此之后,您可以在您的代码中使用它:

IEmailSender emailSender = container.Resolve<IEmailSender>(button.CommandArgument);
emailSender.SendEmail();