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>
できます :-)