問題:
私のドメイン層アセンブリには、次の 2 つのインターフェイスを格納しています。
public interface IDomainEvent { }
と
public interface IHandle<T> where T: IDomainEvent, new()
EventDispatcher
クラスもそこで定義されています:
public static class EventDispatcher {
[ThreadStatic]
private static List<Delegate> actions;
[ThreadStatic]
private static List<Object> handlers;
public static List<Object> Handlers {
get { return handlers; }
set { handlers = value; }
}
public static void Register<T>(Action<T> callback) where T : IDomainEvent, new() {
if(null == actions) {
actions = new List<Delegate>();
actions.Add(callback);
}
}
public static void ClearCallbacks() {
actions = null;
}
public static void Raise<T>(T @event) where T : IDomainEvent, new() {
if(null != Handlers) {
foreach(var handler in Handlers.Where(h => h is IHandle<T>)) {
((IHandle<T>)handler).Handle(@event);
}
}
if(null != actions) {
foreach(var action in actions) {
if(action is Action<T>) {
((Action<T>)action)(@event);
}
}
} // if(null != actions) {
}
}
プレゼンテーション層アセンブリにモジュールがあります:
public class EventDispatchingModule : NinjectModule {
public override void Load() {
// EventDispatcher.Handlers = this.Kernel.GetAll(IHandle<T>); Can't do that!
// Bind<IHandle<CarHasBeenRegisteredEvent>>().To<CarHasBeenRegisteredHandler();
}
}
パラメータKernel.GetAll(IHandle<T>)
を解決できないため、そこを呼び出すことはできません。T
どうすればこれを解決できますか?
ありがとう!