2015-10-05 31 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