是否可以在其他模块之间从模块共享dynamic
类型对象而无需任何静态引用或interface
或任何其他DI / IoC解决方案?
假设我们在Core.dll
程序集中有这样的GlobalEvent:
public class GlobalEvent : CompositePresentationEvent<dynamic>
{
public GlobalEvent()
{
}
// public void Publish(dynamic payload) exist in base class
}
并在ModuleA.dll
(对Core.dll
有静态引用)中,将其发布如下:
public void RaiseVoucherAdded(Models.Voucher voucher)
{
_eventAggregator.GetEvent<GlobalEvent>().Publish(voucher);
}
// also Voucher class is in ModuleA.dll in Models namespace
public class Voucher
{
// members...
}
并在ModuleB.dll
中(对Core.dll
有静态引用),订阅如下:
this._eventAggregator.GetEvent<GlobalEvent>().Subscribe(EventOccured);
...
private void EventOccured(dynamic data)
{
if (data.GetType().Name == "ModuleA.Models.Voucher")
{
DoSomethingByVoucher(data);
}
}
好吧,
此解决方案有哪些缺点?它甚至可能吗?如果是,它是否支持由.NET中的任何其他CLR语言创建的模块?
提前致谢:)