我正在设置一个应用程序,并使用 Unity 将一堆行为注入到服务中。有一个构造函数,例如:
public class WhateverService(IBehavior[] behaviors) : IService {}
所有这些都是在设置容器时设置的,例如:
container.RegisterType<IBehavior, LogBehavior>("LogBehavior");
container.RegisterType<IBehavior, SomeOtherBehavior>("SomeOtherBehavior");
container.RegisterType<IService, WhateverService>();
显然,注入是在 WCF 服务项目中完成的。
现在我想添加一个 MailNotificationBehavior。所以有一堆 SMTP 设置需要保存在某个地方。由于这个 SMTP 配置是一个部署的东西,我想使用默认的 web.config SMTP 设置配置。web.config 位于完成容器配置的同一个项目中,因此 MailNotificationBehavior 需要注入所有这些设置,或者只是 SmtpClient 的一个实例。
就像是:
container.RegisterType<IBehavior, MailNotificationBehavior>("MailNotificationBehavior", new new InjectionConstructor(new SmtpClient()));
问题是 - 我以后如何测试这个?我是否应该为实际的 SMTPClient 编写一个带有适配器的接口 ISmtpClient,这样我就可以伪造它,或者这是一个糟糕的设计?