启动配置

ASP.NET Boilerplate提供了基础结构和模型,可在启动时配置其模块

配置ASP.NET Boilerplate

配置ASP.NET Boilerplate是在模块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在设计时考虑模块化不同的模块可以配置ASP.NET Boilerplate。例如,不同的模块可以添加导航提供程序以将其自己的菜单项添加到主菜单。(有关配置它们的详细信息,请参阅 本地化和 导航文档)。

替换内置服务

Configuration.ReplaceService方法可以用来替代内置服务。例如,您可以将IAbpSession服务替换为您的自定义实现,如下所示:

Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);

ReplaceService方法有一个重载来传递动作以自定义方式进行替换(您可以直接使用Castle Windsor及其高级注册API)。

可以多次更换相同的服务,尤其是在不同的模块中。替换的最后一个将是有效的。模块PreInitialize方法由依赖顺序执行

配置模块

除了框架自己的启动配置外,模块还可以扩展IAbpModuleConfigurations接口,为模块提供配置点。例:

...
using Abp.Web.Configuration;
...
public override void PreInitialize() 
{
    Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
...

在此示例中,我们将AbpWebCommon模块配置为向客户端发送所有异常。

并非每个模块都应定义此类配置。当模块可以在不同的应用程序中重用并且需要在启动时配置时,通常需要它。

为模块创建配置

假设我们有一个名为MyModule的模块,它有一些配置属性。首先,我们为这些可配置属性创建一个类:

public class MyModuleConfig
{
    public bool SampleConfig1 { get; set; }

    public string SampleConfig2 { get; set; }
}

然后我们通过依赖注入MyModule PreInitialize方法注册这个类(因此,它将是可注入的):

IocManager.Register<MyModuleConfig>();

它应该在这个例子中注册为Singleton我们现在可以使用以下代码在我们模块的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系统中创建中央配置点。

nidie.com.cn - 用心与你沟通