我有一个实现泛型接口的具体类型版本的类。我发现如果我在编译时将一个对象传递给我的函数(即使它可能是正确的对象),它仍然被认为是一个对象,因此在运行时失败并出现错误:
Unable to cast object of type 'TestEventHandler' to type 'IDomainEventHandler '1[System.Object]'.
我正在反序列化来自总线的消息(哪些产品对象,应该有一个关联的DomainEventHandler<of_deserialized_type>
与消息关联的关联。
总而言之,我认为问题IDomainEventHandler<T>
不是从 转换`IDomainEventHandler<object>
,我将不胜感激有关如何最好地解决此问题并仍然保持通用IDomainEventHandler<T>
接口的指导,即使对象被传递到Publish()
.
[TestClass]
public class InternalMessageHandlerTests
{
class TestEvent
{
}
class TestEventHandler : IDomainEventHandler<TestEvent>
{
public void HandleEvent(TestEvent domainEvent)
{
}
}
[TestMethod]
public void Test()
{
TestEvent testEvent = new TestEvent();
object testEventAsObject = testEvent; // compile time type information lost
Publish(testEvent); // this is OK :)
Publish(testEventAsObject); // this fails :(
}
public void Publish<T>(T eventToPublish) where T : class
{
var handlerInstance = new TestEventHandler();
IDomainEventHandler<T> converted = (IDomainEventHandler<T>)handlerInstance;
converted.HandleEvent(eventToPublish);
}
}