我提出了一个问题,如果只处理单个接口实例,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,
您的反馈将非常值得赞赏。
答案 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();