【发布时间】:2012-06-26 13:01:59
【问题描述】:
我正在尝试使用 Unity 配置向类属性添加依赖项,并且我尝试注入的类型是通用的。
我有界面
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>
它有效:-)
【问题讨论】:
-
Unity文档中有解释:msdn.microsoft.com/en-us/library/…
标签: c# .net dependency-injection unity-container ioc-container