nopcommerce笔记1
在Application_Start中依次的调用是:
EngineContext.Initialize
new NopEngine
ContainerConfigurer.Configure
NopEngine.Initialize
ContainerConfigurer.Configure在NopEngine的构造函数调用:
public NopEngine(EventBroker broker, ContainerConfigurer configurer)
{
var config = ConfigurationManager.GetSection("NopConfig") as NopConfig;
InitializeContainer(configurer, broker, config);//这里面调用了ContainerConfigurer.Configure
}
private void InitializeContainer(ContainerConfigurer configurer, EventBroker broker, NopConfig config)
{
var builder = new ContainerBuilder();
_containerManager = new ContainerManager(builder.Build());
configurer.Configure(this, _containerManager, broker, config);
}
我当时有一个想法,为什么不把IEngine的接口void Initialize(NopConfig config);设计成:
void Initialize(NopConfig config,ContainerConfigurer configurer, EventBroker broker);
把在构造函数中的configurer.Configure调用移到Initialize中。
后来一想,这样会失去通用性,因为ContainerConfigurer 、EventBroker 的功能并非必须的。
非要移到Initialize中也不是不可,可以做一个实现IEngine的自己的类。