是否可以在没有任何静态引用或任何其他 DI/IoC 解决方案dynamic
的情况下在其他模块之间共享来自模块的类型对象?interface
假设我们在汇编中有一个这样的 GlobalEvent Core.dll
:
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 语言创建的模块?
提前致谢 :)