这是使用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 容器中缺少映射。需要添加映射此接口的具体类