Я пытаюсь добавить зависимость к свойству класса с помощью 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>
?
Благодаря
Update
Я изменил свой класс к следующему:
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: https: // msdn.microsoft.com/en-us/library/ff660936%28v=pandp.20%29.aspx?f=255&MSPPError=-2147217396 – Tohid