码迷,mamicode.com
首页 > 其他好文 > 详细

ABP 框架从源码学习1--

时间:2016-06-05 21:37:03      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

一开始可能会写得很乱,因为自己也不太清楚从哪里入手,可能会直接将一些别人的心得罗列出来,后面我会在吸收了以后,找到了头绪,然后整理归纳出自己的东西。

不多扯了,先摘一段别人的心得,原文链接http://www.cnblogs.com/Azula/p/4988949.html

 

AbpBootstrapper类在Abp.dll中,其主要用于框架的基本配置的注册和初始化,在Web应用启动阶段实例化一个AbpBootstrapper并调用Initialize方法初始化,

 

    public abstract class AbpWebApplication : HttpApplication
    {
        /// <summary>
        /// Gets a reference to the <see cref="AbpBootstrapper"/> instance.
        /// </summary>
        protected AbpBootstrapper AbpBootstrapper { get; private set; }

        protected AbpWebApplication()
        {
            AbpBootstrapper = new AbpBootstrapper();
        }

        /// <summary>
        /// This method is called by ASP.NET system on web application‘s startup.
        /// </summary>
        protected virtual void Application_Start(object sender, EventArgs e)
        {
            ThreadCultureSanitizer.Sanitize();

            AbpBootstrapper.IocManager.RegisterIfNot<IAssemblyFinder, WebAssemblyFinder>();
            AbpBootstrapper.Initialize();
        }

而在 AbpBootstrapper.Initialize()方法中在执行AbpBootstrapper的Initialize()方法时首先会执行

IocManager.IocContainer.Install(new AbpCoreInstaller());

主要执行的就是注册系统框架级的所有配置类,具体代码如下

 internal class AbpCoreInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
                Component.For<IUnitOfWorkDefaultOptions, UnitOfWorkDefaultOptions>().ImplementedBy<UnitOfWorkDefaultOptions>().LifestyleSingleton(),
                Component.For<INavigationConfiguration, NavigationConfiguration>().ImplementedBy<NavigationConfiguration>().LifestyleSingleton(),
                Component.For<ILocalizationConfiguration, LocalizationConfiguration>().ImplementedBy<LocalizationConfiguration>().LifestyleSingleton(),
                Component.For<IAuthorizationConfiguration, AuthorizationConfiguration>().ImplementedBy<AuthorizationConfiguration>().LifestyleSingleton(),
//此处省略若干行
); } }

 

 

 

 

 

 

 

  public class AbpBootstrapper : IDisposable
    {
        /// <summary>
        /// Gets IIocManager object used by this class.
        /// </summary>
        public IIocManager IocManager { get; private set; }

        /// <summary>
        /// Is this object disposed before?
        /// </summary>
        protected bool IsDisposed;

        private IAbpModuleManager _moduleManager;
//.........
}

 

该类主要包含两个公有属性分别是IIocManager 和 IAbpModuleManager

 

IIocManager内部包装了一个Castle的依赖注入容器IWindsorContainer,

所有类型的注册,解析还有后面实现的AOP机制的拦截器都是注册在该容器中的,将具体的注册还有解析功能分别包含在其父接口IIocRegistrar和IIocResolver中,

其中AddConventionalRegistrar,RegisterAssemblyByConvention(Assembly assembly),

RegisterAssemblyByConvention(Assembly assembly, ConventionalRegistrationConfig config)三个方法需要特别注意,

第一个方法,是向IocManager的一个私有泛型集合List<IConventionalDependencyRegistrar>注册注册机制,

通常所有的Module类的预初始化方法中调用以决定哪些类型需要被注册(如果没有就无需调用),

比如在Abp程序集中的BasicConventionalRegistrar实现的就是搜索并注册指定的程序集中的所有实现了ITransientDependency,

ISingletonDependency和IInterceptor的类并注册到依赖容器中,第二,第三个方法执行真正的注册逻辑,

通常在一个个具体的Module的初始化方法中调用,传入当前Module所属的程序集,

迭代List<IConventionalDependencyRegistrar>将当前程序集作为参数执行注册,

第二,第三个方法的区别在于第三个方法多了一个ConventionalRegistrationConfig参数,

以决定是否还需要搜索当前程序及中的IWindsorInstaller的实现类进行注册,默认是需要的。

 

IAbpModuleManager主要用于管理所有的模块默认也就是一个个的程序集(一个模块对应一个程序集),主要用于搜索到所有的Module以及他们的依赖Module,首先执行所有Module的PreInitialize方法再执行所有的Initialize,最后执行所有的PostInitialize,执行IAbpModuleManager的ShutdownModules时顺序颠倒依次执行所有具体Module的ShutDown方法。

 

ABP 框架从源码学习1--

标签:

原文地址:http://www.cnblogs.com/xuzimian/p/5561708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!