ASP.NET Boilerplate提供了在StartUp中配置其模塊的基礎設施和模型。app
配置ABP是在模塊的PreInitialize 方法中作的,以下所示:框架
public class SimpleTaskSystemModule : AbpModule { public override void PreInitialize() { //Add languages for your application Configuration.Localization.Languages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", true)); Configuration.Localization.Languages.Add(new LanguageInfo("tr", "Türkçe", "famfamfam-flag-tr")); //Add a localization source Configuration.Localization.Sources.Add( new XmlLocalizationSource( "SimpleTaskSystem", HttpContext.Current.Server.MapPath("~/Localization/SimpleTaskSystem") ) ); //Configure navigation/menu Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>(); } public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } }
ABP的設計考慮到了模塊化,能夠配置不一樣的模塊。好比模塊能夠添加導航提供者在主菜單中添加本身的菜單項(有關配置它們的詳細信息,請參閱本地化和導航文檔)。ide
Configuration.ReplaceService方法可用於重寫內置服務,例如,咱們能夠用自定義實現替換IAbpSession服務,以下所示:模塊化
Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);
ReplaceService方法有一個重載,經過一個動做以定製的方式進行替換(咱們能夠直接使用Castle Windsor及其高級註冊API)。this
相同的服務能夠被屢次替換,特別是在不一樣的模塊中。最後一個替換的是有效的那個。按照依賴順序執行模塊PreInitialize方法。spa
除了框架本身的啓動配置以外,模塊還能夠擴展IAbpModuleConfigurations接口,爲模塊提供配置點。例如:設計
... using Abp.Web.Configuration; ... public override void PreInitialize() { Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true; } ...
在上面的例子中,咱們配置了AbpWebCommon模塊,將全部異常發送給客戶端。code
不是每一個模塊都應該定義這種類型的配置。當模塊在不一樣的應用程序中須要重用時一般會啓動時配置。blog
假設咱們有一個名爲MyModule的模塊,它有一些配置屬性。首先,咱們爲這些可配置屬性建立一個類:接口
public class MyModuleConfig { public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; } }
而後,咱們經過抵賴注入將這個類註冊到MyModule的預初始化方法中(所以,它將是可注入的):
IocManager.Register<MyModuleConfig>();
它應該像本例中那樣註冊爲單例。咱們如今可使用如下代碼在模塊的PreInitialize方法中配置MyModule:
Configuration.Get<MyModuleConfig>().SampleConfig1 = false;
這樣咱們可使用IAbpStartupConfiguration.Get方法,能夠建立IModuleConfigurations 擴展方法,以下所示:
public static class MyModuleConfigurationExtensions { public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations) { return moduleConfigurations.AbpConfiguration.Get<MyModuleConfig>(); } }
如今其餘模塊可使用擴展方法來配置這個模塊:
Configuration.Modules.MyModule().SampleConfig1 = false; Configuration.Modules.MyModule().SampleConfig2 = "test";
這使得研究模塊配置和在一個地方收集它們變得很容易(Configuration.Modules…)。ABP自己爲本身的模塊配置定義了擴展方法。
在某些時候,MyModule須要這種配置。咱們能夠注入MyModuleConfig並使用配置的值。例如
public class MyService : ITransientDependency { private readonly MyModuleConfig _configuration; public MyService(MyModuleConfig configuration) { _configuration = configuration; } public void DoIt() { if (_configuration.SampleConfig2 == "test") { //... } } }
經過這種方式,模塊能夠在ASP.NET Boilerplate中建立中心配置點。。。
: