ABP框架系列之四十九:(Startup-Configuration-启动配置)
ASP.NET Boilerplate provides an infrastructure and a model to configure it and modules on startup.
ASP.NET提供了一个基础和样板模型配置和模块启动。
Configuring ASP.NET Boilerplate
Configuring ASP.NET Boilerplate is made on PreInitialize event of your module. Example configuration:
配置ASP.NET样板在模块的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());
}
}
ASP.NET Boilerplate is designed modularity in mind. Different modules can configure ASP.NET Boilerplate. For example, different modules can add navigation provider to add their own menu items to the main menu. (Seelocalization and navigation documents for details on configuring them).
ASP.NET样板设计模块化的思想。不同的模块可以配置ASP.NET样板。例如,不同的模块可以添加导航提供程序,将自己的菜单项添加到主菜单中。(在它们配置细节seelocalization导航文件)。
Replacing Built-In Services(替换内置服务)
Configuration.ReplaceService method can be used to override a built-in service. For example, you can replace IAbpSession service with your custom implementation as shown below:
configuration.replaceservice方法可用于重写内置服务。例如,您可以与您的自定义实现替代iabpsession服务如下图所示:
Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);
ReplaceService method has an overload to pass an action to make replacement in a custom way (you can directly use Castle Windsor for advanced registration API).
replaceservice方法具有过载通过一个自定义的方式做替代动作(可以直接使用Castle Windsor 高级注册API)。
Same service can be replaced multiple times (especially, in different modules). Last replaced will be valid (As you know, module PreInitialize methods are executed by dependency order).
同样的服务可以多次更换(特别是在不同的模块中)。最后更换将是有效的(你知道,模块分发方法是通过依赖顺序执行)。
Configuring Modules(配置模块)
Beside framework's own startup configuration, a module can extend IAbpModuleConfigurations interface to provide configuration points for the module. Example:
在框架的启动配置,一个模块可以扩展iabpmoduleconfigurations接口提供的模块配置点。例子:
...
using Abp.Web.Configuration;
...
public override void PreInitialize()
{
Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
...
In this example, we configured AbpWebCommon module to send all exceptions to clients.
在这个例子中,我们配置abpwebcommon模块发送给客户的所有异常。
Not every module should define this type of configuration. It's generally needed when a module will be re-usable in different applications and needs to be configured on startup.
不是每个模块都应该定义这种类型的配置。当一个模块在不同的应用程序中重新使用,并且需要在启动时进行配置时,这通常是必需的。
Creating Configuration For a Module(创建一个模块配置)
Assume that we have a module named MyModule and it has some configuration properties. First, we create a class for these cofigurable properties:
假设我们有一个模块叫MyModule,它有一些配置属性。首先,我们创建一个可配置特性这类:
public class MyModuleConfig
{
public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; }
}
Then we register this class to Dependency Injection on PreInitialize event of MyModule (Thus, it will be injectable):
然后我们登记这类依赖注入在起始事件mymodule(因此,它将注射):
IocManager.Register<MyModuleConfig>();
It should be registered as Singleton as in this sample. Now, we can use the following code to configure MyModule in our module's PreInitialize method:
它应该像本示例一样注册为单例。现在,我们可以使用下面的代码在我们的模块的配置MyModule的起始方法:
Configuration.Get<MyModuleConfig>().SampleConfig1 = false;
While we can use IAbpStartupConfiguration.Get method as shown below, we can create an extension method to IModuleConfigurations like that:
我们可以用iabpstartupconfiguration。获取方法如下图所示,我们可以创造imoduleconfigurations这样的扩展方法:
public static class MyModuleConfigurationExtensions
{
public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations)
{
return moduleConfigurations.AbpConfiguration.Get<MyModuleConfig>();
}
}
Now, other modules can configure this module using the extension method:
现在,其他模块可以使用扩展方法配置这个模块:
Configuration.Modules.MyModule().SampleConfig1 = false;
Configuration.Modules.MyModule().SampleConfig2 = "test";
This makes easy to investigate module configurations and collect them in a single place (Configuration.Modules...). ABP itself defines extension methods for it's own module configurations.
At some point, MyModule needs to this configuration. You can inject MyModuleConfig and use configured values. Example:
这便于调查模块配置,并在单个位置收集它们(配置……)。ABP本身为其自己的模块配置定义了扩展方法。
在某一点上,MyModule需要这样的配置。你可以把MyModuleConfig和使用配置值。例子:
public class MyService : ITransientDependency
{
private readonly MyModuleConfig _configuration; public MyService(MyModuleConfig configuration)
{
_configuration = configuration;
} public void DoIt()
{
if (_configuration.SampleConfig2 == "test")
{
//...
}
}
}
Thus, modules can create central configuration points in ASP.NET Boilerplate system.
因此,模块可以在ASP.NET系统中心配置点创建样板文件。
ABP框架系列之四十九:(Startup-Configuration-启动配置)的更多相关文章
- ABP框架系列之三十九:(NLayer-Architecture-多层架构)
Introduction Layering of an application's codebase is a widely accepted technique to help reduce com ...
- ABP框架系列之四十四:(OWIN)
If you are using both of ASP.NET MVC and ASP.NET Web API in your application, you need to add Abp.Ow ...
- ABP框架系列之四十:(Notification-System-通知系统)
Introduction Notifications are used to inform users on specific events in the system. ASP.NET Boiler ...
- ABP框架系列之四十六:(Setting-Management-设置管理)
Introduction Every application need to store some settings and use these settings in somewhere in th ...
- ABP框架系列之四十二:(Object-To-Object-Mapping-对象映射)
Introduction It's a common to map a similar object to another object. It's also tedious and repeatin ...
- ABP框架系列之十九:(Debugging-调试)
While it's not generally needed, you may want to step into ABP's source code while you debugging you ...
- ABP框架系列之四十八:(Specifications-规范)
Introduction Specification pattern is a particular software design pattern, whereby business rules c ...
- ABP框架系列之四十五:(Quartz-Integration-Quartz-集成)
Introduction Quartz is a is a full-featured, open source job scheduling system that can be used from ...
- 14.6.1 InnoDB Startup Configuration 启动配置
14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置. 推荐你定义数 ...
随机推荐
- redis集群相关
1.主从数据库配置 为master数据库添加slave数据库只需要在从数据库的配置中添加配置: slaveof 主数据库地址 主数据库端口 当然,也可以通过命令: redis-server --por ...
- python初接触
浑浑噩噩的过了3年多大学生涯,就借此开始下定决心好好的学好一门技术,为心中那个游戏梦而努力. 正式开课的第一天(也算不的吧,毕竟昨天老师也和我们讲了python课程的大纲内容).自我总结下今天的内容吧 ...
- @method_decorator() 源码解析
# coding:utf-8 """ 作用: 原理:闭包 >> 1. 函数内部定义函数 2.内部函数使用外部函数的变量 3.外部函数返回内部函数的引用 带参数 ...
- 使用Nexus2搭建Maven本地仓库
由于OS为WindowsXP,而Nexus3forWindows为x64版本,只能选择安装nexus2了. Windows(x86)平台,Nexus Repository Manager OSS 2. ...
- python 列表 list的基本操作
一,Python 的列表数据类型包含更多的方法. 这里是所有的列表对象方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list.exte ...
- Linux网络编程学习(五) ----- 信号(第四章)
1.基本概念 进程阻塞: 进程执行条件得不到满足,就自动放弃CPU资源而进入休眠状态,以等待条件满足,当条件满足时,系统就将控制权还给该进程进行未完成的操作 共享资源: 进程间协调使用的系统资源 锁定 ...
- Javascript面试题收集
第一部分“ 来源: http://bbs.miaov.com/forum.php?mod=viewthread&tid=6974 1.var a = b = 1; ——这样定义变量的隐患 fu ...
- selenium下打开Chrome报错解决
错误如下: [22516:20196:0704/024642.979:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SO ...
- EF连接Mysql 表'TableDetails'中的列'IsPrimaryKey'的值为DBNull
无法生成模型,因为存在以下异常:'System.Data.StrongTypingException:表'TableDetails'中的列'IsPrimaryKey'的值为DBNull.---> ...
- 框架和内嵌框架--->frameset 和 iframe 的文档对象
框架和内嵌框架分别用 HTMLFrameElemnt 和 HTMLIFrameElement 表示,它们在 DOM2 中有一个新属性----->contentDocument,是一个指针,表示框 ...