我正在尝试使用 Unity Configuration 向类属性添加依赖项,并且我尝试注入的类型是通用的。
我有界面
public interface ISendMessage
{
void Send(string contact, string message);
}
班级
public class EmailService : ISendMessage
{
public void Send(string contact, string message)
{
// do
}
}
班级
public class MessageService<T> where T : ISendMessage
{
}
我尝试通过其他类中的构造函数注入来使用它
public MyService(MessageService<ISendMessage> messageService)
{
}
我如何注射MessageService<EmailService>
而不是MessageService<ISendMessage>
?
我尝试通过 app.config
<alias alias="MessageService'1" type="MyNamespace.MessageService'1, MyAssembly" />
<alias alias="EmailMessageService'1" type="MyNamespace.MessageService'1[[MyNamespace.EmailService, MyAssembly]], MyAssembly" />
我收到错误
无法解析类型名称或别名 MessageService'1。请检查您的配置文件并验证此类型名称。
以及如何传入MessageService<T>
实现参数MessageService<EmailService>
?
谢谢
更新
我将我的课程修改为以下内容:
public class MessageService<T> where T : ISendMessage
{
private T service;
[Dependency]
public T Service
{
get { return service; }
set { service = value; }
}
}
并使用配置
<alias alias="ISendMessage" type="MyNamespace.ISendMessage, MyAssembly" />
<alias alias="EmailService" type="MyNamespace.EmailService, MyAssembly" />
<register type="ISendMessage" mapTo="EmailService">
</register>
有用 :-)