Nop源碼分析二

 上文我們已經通過該行代碼:var typeFinder = containerManager.Resolve<ITypeFinder>(); 從注入容器中獲取到了typeFinder實例。

通過該實例進行以下操作。

 var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>(); 從bin所有程序集中獲取實現了IDependencyRegistrar接口的所有實現類。循環這些實現類病調用 void Register(ContainerBuilder builder, ITypeFinder typeFinder);方法來做其他事情。

通過反射能夠獲取到8個實現了該接口的實例,下面我們一個個分析,實現了這些接口的類都做了什麼事情。

1,DependencyRegistrar : IDependencyRegistrar

    A:註冊HTTP context and other related stuff,

   B:註冊WebHelper。 builder.RegisterType<WebHelper>().As<IWebHelper>().InstancePerHttpRequest();

   C:註冊程序集中的所有控制器。  builder.RegisterControllers(typeFinder.GetAssemblies().ToArray());

   D:註冊和數據訪問層相關的類。

  E:註冊插件和緩存相關的類。

  F:註冊worker和store相關的類。

G:註冊所有實現類。

H:註冊和客戶相關的類:consumers = typeFinder.FindClassesOfType(typeof(IConsumer<>)).ToList();

I:註冊發佈訂閱服務類:

            builder.RegisterType<EventPublisher>().As<IEventPublisher>().SingleInstance();
            builder.RegisterType<SubscriptionService>().As<ISubscriptionService>().SingleInstance();

2,註冊和稅相關的組件:

      DependencyRegistrar : IDependencyRegistrar

    builder.RegisterType<TaxRateService>().As<ITaxRateService>().InstancePerHttpRequest();

3,註冊和google相關的服務。

4,註冊:  builder.RegisterType<OpenIdProviderAuthorizer>().As<IOpenIdProviderAuthorizer>().InstancePerHttpRequest();
            builder.RegisterType<OpenIdRelyingPartyService>().As<IOpenIdRelyingPartyService>().InstancePerHttpRequest();

 5,註冊            builder.RegisterType<FacebookProviderAuthorizer>().As<IOAuthProviderFacebookAuthorizer>().InstancePerHttpRequest();

6,   builder.RegisterType<HomeController>()
                .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"));

7,註冊一些控制器和            builder.RegisterType<InstallationLocalizationService>().As<IInstallationLocalizationService>().InstancePerHttpRequest();

8,註冊一個和重量相關的服務類。

9,註冊broker類。

至此所有容器注入的工作全部完成,下面開始初始化一些工作。

所有的工作全部在  RunStartupTasks();方法中完成。

startUpTaskTypes = typeFinder.FindClassesOfType<IStartupTask>(); 該行代碼獲取程序集中所有實現了IStartupTask接口的的類。

循環遍歷實現類,並執行Execute()方法。來完成所有的初始化工作,代碼如下:

 foreach (var startUpTask in startUpTasks)
                startUpTask.Execute();

1,EfStartUpTask : IStartupTask :ef相關的初始化,存儲過程,函數索引等。

2,初始化GoogleProductObjectContext等。

3,初始化AutoMapperStartupTask,實體好模型的自動映射類。

4,set localization service for telerik 。

至此initialize engine context的工作全部完成。
            EngineContext.Initialize(false)執行完畢。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章