[英]Event Callback with Strongly Typed Object
我正在尝试为我的代码中需要的功能提供概念证明。 在实际的应用程序中,我有一个依赖注入容器,而子代有时需要“新建”一个对象,并且我需要DI容器来返回该对象。 所以我正在使用一个带有回调的事件,该回调使孩子能够获得该实例化的对象。
问题是,我想要一个事件,但是允许它返回调用者指定的任何对象。 我不确定如何获取强类型对象(不强制转换)。 我觉得应该有可能。 如果这足够令人困惑,这是我的示例:
class Program
{
public static event EventHandler<MyEventArgs> MyEvent;
public static void Main()
{
MyEvent += (sender, args) =>
{
Console.WriteLine("Event Fired");
args.Callback("hello");
};
MyEvent(null, new MyEventArgs(obj => Console.WriteLine($"How do I get {obj} strongly typed")));
Console.Read();
}
}
和事件参数:
public class MyEventArgs
{
public Action<object> Callback { get; set; }
public MyEventArgs(Action<object> callback)
{
Callback = callback;
}
}
我被困住了,因为MyEventArgs
不能接受类型参数,因为我真的只希望一个事件来处理任何返回对象类型。 是否可以通过回调获取强类型对象?
同样,我可以将Type
作为参数发送并进行转换,但是我觉得这应该可行。 这完全有可能也是不可能的。
感谢您的指导。
您可能想看一下动态类型 。
public class MyEventArgs
{
public Action<dynamic> Callback { get; set; }
public MyEventArgs(Action<dynamic> callback)
{
Callback = callback;
}
}
它将允许您将任何类型传递给回调。
我制定了几乎与我想要的解决方案相同的解决方案:
public class MyEventArgs<T> : MyEventArgs where T : class
{
private Action<T> _callback;
public MyEventArgs(Action<T> callback)
{
_callback = callback;
}
public override void DoCallback(object item)
{
_callback(item as T);
}
}
public abstract class MyEventArgs
{
public abstract void DoCallback(object item);
}
在我的主目录中:
public static event EventHandler<MyEventArgs> MyEvent;
public static void Main()
{
MyEvent += (sender, args) =>
{
Console.WriteLine("Event Fired");
args.DoCallback("hello");
};
MyEvent(null, new MyEventArgs<string>(s => Console.WriteLine($"{s} is a string")));
Console.Read();
}
缺少的只是DoCallback()'s
参数不是强类型的。 但这与我想要的非常接近。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.