我知道这里有几个关于我的问题的帖子,但似乎没有一个提供特定于我的案例的解决方案。
我有一个简短的静态类,看起来像这样:
public static class NotificationCenter
{
private static readonly Dictionary<Type, object> Notifiers = new Dictionary<Type, object>();
public static INotifier<T> NotifierForType<T>()
{
object notifier = null;
return Notifiers.TryGetValue(typeof(T), out notifier)
? (INotifier<T>)notifier
: null;
}
public static void RegisterNotifier<T>(INotifier<T> notifier)
{
Notifiers[typeof(T)] = notifier;
}
}
以上工作正常,但我并不热衷于将INotifiers
存储在IDictionary<Type, object>
中 - 具体而言,我并不热衷于object
部分,因为它使收集非类型安全。
我已经阅读了很多类似的帖子,建议从名为INotifier<T>
的基本接口派生INotifier
,但我不相信这在我的实例中是合适的,因为INotifier<T>
接口看起来像这样:
interface INotifier<T>
{
void Notify(T notification);
}
如果我是从基类派生的,那么基类将无法实现Notify方法(除非它是使用签名void Notify(object notification)
实现的,但我们又回到了原点),并且这就是我希望INotifier<T>
类的客户端能够调用的内容。
答案 0 :(得分:1)
您需要枚举所有通知者吗?如果不是,解决方案可以非常简单:
namespace NotifierTest
{
interface INotifier<T>
{
void Notify(T notification);
}
class Notifier<T> : INotifier<T>
{
public void Notify(T notification)
{
Debug.Print("Notify: " + notification);
}
}
static class NotificationCenter<T>
{
public static INotifier<T> notifier;
}
class Program
{
static void Main(string[] args)
{
NotificationCenter<int>.notifier = new Notifier<int>();
NotificationCenter<int>.notifier.Notify(5);
}
}
}