我有各种接口,我需要能够调用它们。这是基类:
public class MyactorBase<TChild>: actorBase where TChild : MyactorBase<TChild>
{
public MyactorBase()
{
var actors = ChildClass
.GetInterfaces()
.Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IactorMessageHandler<>))
.Select(x=> (arguments: x.GetGenericArguments(),definition: x))
.ToImmutableList();
if (actors.Any())
{
var ty = actors.First();
var obj = activator.CreateInstance(ty.definition,true);
// how to call method implementation
}
}
protected sealed override bool Receive(object message) => false;
private Type ChildClass => ((this as TChild)?? new object()).GetType();
}
public interface IactorMessageHandler<in T>
{
Task Handle(T msg);
}
我阅读了这些博客文章:
作者在编译时已经知道类型,因此可以正确地进行类型转换。我在编译时一无所知,因此无法使用通用方法或使用()运算符或as运算符进行类型转换。
更新:我认为人们对我想要实现的目标并不了解。所以考虑一下。我做了一个裸包,任何人都可以 取决于。在世界某个地方,有人编写了以下代码:
public class MyMessage
{
public int Number { get; }
public MyMessage(int number) => Number = number;
}
public class MyNewactor: MyactorBase<MyNewactor>,IactorMessageHandler<MyMessage>
{
public Task Handle(MyMessage msg)
{
return Task.CompletedTask;
}
}
我希望任何实现 IactorMessageHandler 的类,我都应该能够调用其方法 Handle(T msg)。所以当我能够实例化它时(考虑到我没有使用任何依赖注入),如何才能以最有效的方式调用该方法?
还有其他替代方法吗?