NServiceBus で使用するメッセージ IGetQuote を定義しました。以下に、依存する他のタイプとともに示します。
public interface IGetQuote : ICommand
{
IRisk Risk { get; set; }
}
public interface IRisk
{
IProposer Proposer { get; }
}
public interface IProposer : IDriver
{
string Postcode { get; set; }
}
public interface IDriver
{
string Name { get; set; }
void DoSomething();
}
Fluent API を使用して IBus を取得すると、CreateBus(); を呼び出すときに次の例外が発生します。
System.TypeLoadException: "アセンブリ 'Contracts _impl、Version=0.0.0.0、Culture=neutral、PublicKeyToken=null' からの型 'Contracts.IProposer_ impl'のメソッド 'DoSomething' には実装がありません。":"Contracts.IProposer__impl"
NServiceBus の仕組みについて私が理解していることから、IGetQuote メッセージが送信されたときに XML シリアル化を機能させるために、IGetQuote および IProposer などの関連するインターフェイスを実装する型を作成しようとしています。
IProposer が IDriver から継承されないようにインターフェイスを調整すると、問題は解決します。私の最初の結論は、DoSomething メソッドが問題であるに違いないというものでしたが、IProposer に IDriver を再度継承させ、DoSomething メソッドを IProposer に移動すると、例外はスローされません (ただし、「インターフェイス IProposer にはメソッドが含まれているため、インターフェイス IProposer にはメソッドが含まれているため、警告メッセージが表示されます)。マッピングできません。マッピングされていないインターフェースはメッセージの送信に使用できないことに注意してください」)。
そのため、インターフェースで宣言されたメソッドがあり、そのインターフェースがメッセージタイプが依存するタイプの1つによって拡張されている場合に例外が発生するようです。動的プロキシ生成がインターフェイスの継承を考慮していないようです。
ここで何が起こっているか知っている人はいますか?