2015-10-05 35 views
1

我正在嘗試使用NopCommerce v3.5並試圖用Ninject v3.2取代Autofac。我一直在搜索NopCommerce如何從設置表中加載記錄,但目前尚不清楚。如果曾經,我想使用Ninject加載設置。感謝您的任何幫助。如何從設置表NopCommerce v3.5加載記錄

下面是Nop.web.Framework.DependencyRegistrar.cs

builder.RegisterType<SettingService>().As<ISettingService>() 
    .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static")) 
    .InstancePerLifetimeScope(); 
builder.RegisterSource(new SettingsSource()); 
+0

我很好奇你爲什麼要取代Autofac? Ninject有沒有提供給你的東西? – DavidG

+0

@Steven我已經有一個自定義控制器工廠(NinjectControllerFactory)和一個NinjectDependencyResolver作爲我的默認依賴關係解析器。我現在正在設置和緩存。 – DeathWish

+0

@DavidG這只是,我不習慣Autofac。我一直在使用Ninject,但在Ninject方面我還沒有達到中等水平,我認爲:) – DeathWish

回答

5

樣本代碼,我會盡力解釋它,以及我可以。

根據Autofac's docsRegisterSource允許您爲工廠註冊您不知道或考慮過的類。它確實會延遲將類型與提供它們的規則進行綁定。

這是如何應用的?

當您需要容器中的類的實例(如LoggerSettings)時,autofac將檢查您在nopCommerce所具有的不同依賴註冊器中聲明的所有規則,並且它會詢問註冊源:嗨!我需要一個LoggerSettings的實例,你知道這件事嗎? RegistrationSource檢查它並說「是的,它實現了ISettings,在這裏你有它的注入規則(在這個例子中是一個lambda從一個通用存儲庫中檢索設置實例),保留它,下次你不需要問」。請注意,它將返回類型的實例化規則,而不是實例本身。

作爲一種替代方案,也許你可以對所有程序集進行爬取,但對於像這樣的插件的大型系統來說,這將是一個痛苦。你也可以註冊每個特定的班級,但在這種情況下,這是不可行的。

要查看它的工作情況,請在SettingsSource和代理內部的兩個方法中設置幾個斷點並啓動項目。

要做到這一點與Ninject,你將需要複製這種行爲。

+0

謝謝@Marco。 – DeathWish