依赖项注入电子邮件管理器构造函数调用



这是使用Unity进行依赖注入的后续问题

所以,作为一个设置,我有一个CustomConfiguration.cs文件,它应该从我的web.config文件中的配置部分填充

这是文件的签名

public class CustomConfiguration : ICustomProcessorConfig, IEmailConfig, IReportConfig
    {
        #region Properties
        private CustomProcessorConfig ConfigSection { get; set; }
        #endregion
        #region Constructors (1)
        public CustomConfiguration()
        {
            ConfigSection = ConfigurationManager.GetSection("customConfiguration") as ConfigSection;
        }
        #endregion Constructors 
        #region ICustomConfiguration Members
        public string Text { get { return ConfigSection.Text; } }
        public string Subject { get { return ConfigSection.Subject; } }
        public string SmtpHost { get { return ConfigSection.EmailSettings.SmtpHost; } }
        public int SmtpPort { get { return ConfigSection.EmailSettings.SmtpPort; } }

这些是我用于电子邮件生成的 3 个文件:

 public interface IEmailManager
    {
        void SendEmail(string toAddress, string fromAddress, string subject, string body, bool htmlBody);
}
 public interface IEmailConfig
    {
        string SmtpHost { get;  }
        int SmtpPort { get;  }
   }

最后,我有继承IEmailManager界面的电子邮件管理器

public class EmailManager: IEmailManager
    {
        #region Constructors (1)
        public EmailManager(IEmailConfiguration configuration)
        {
            CurrentSmtpClient = new SmtpClient
                                    {
                                        Host = configuration.SmtpHost,
                                        Port = configuration.SmtpPort,
                                        Credentials =
                                            new NetworkCredential(configuration.UserName, configuration.Password)
                                    };
        }
        #endregion Constructors 
// send Mail is also implemented
}

回到上一个问题,我有我的设置,如:

Container = new UnityContainer();
  Container.RegisterType<ICustomConfiguration,CustomConfiguration>(new ContainerControlledLifetimeManager()); 
                Container.RegisterType<IEmailManager, EmailManager>(new ContainerControlledLifetimeManager());
                Container.RegisterType<IReportGenerator, ReportGenerator>(new ContainerControlledLifetimeManager());
Configuration = Container.Resolve<ICustomConfiguration>(); 
                Emailer = Container.Resolve<IEmailManager>(); 
                ReportGenerator = Container.Resolve<IReportGenerator>(); 

我得到一个ResolutionFailedException说在尝试为 EmailManager 调用构造函数时无法解析参数配置。

有一个不同的 DI 设置,我仍然需要IEmailConfig的配置信息。有没有办法过去这个?我需要配置信息才能继续发送电子邮件,因为您可以通过我的设置猜到。

我是否将不同的存储库绑定到我的容器?或者我应该如何更改我的电子邮件管理器代码?

您需要将

IEmailConfig 接口注册到容器中的 CustomConfiguration 类。

  Container.RegisterType<IEmailConfig , CustomConfiguration >(new ContainerControlledLifetimeManager());

IEmailConfiguration 在 Unity 容器中缺少映射。需要添加映射此接口的具体类

最新更新