zoukankan      html  css  js  c++  java
  • .netCore 源码看Build 模式

    .netCore 源码:

    https://github.com/dotnet/aspnetcore

    这是扩展,现在扩展的很多代码,移到其他的Resposities 中了 

    https://github.com/dotnet/extensions

    Build 模式,比较简单,就是有一个Builder .她会有很多零件,还有一个Build 方法,可以把这些零件生成一个 实现 IProvider 的对象。简单示例如下(摘自Eleven 老师)

       public class BuilderVolkswagen : AbstractBuilder
        {
            private Engine _Engine = null;
            private Wheels _Wheels = null;
            private Light _Light = null;
    
            public override void Engine()
            {
                this._Engine = new Engine()
                {
                    Name = "_Engine"
                };
    
                Console.WriteLine("{0} build Engine", this.GetType().Name);
            }
    
            public override void Wheels()
            {
                this._Wheels = new Wheels()
                {
                    Name = "_Wheels"
                };
                Console.WriteLine("{0} build Wheels", this.GetType().Name);
            }
    
            public override void Light()
            {
                this._Light = new Light()
                {
                    Name = "_Light"
                };
                Console.WriteLine("{0} build Light", this.GetType().Name);
            }
    
            public override Car Build()
            {
                Console.WriteLine("组装 {0} {1} {2}", this._Engine, this._Light, this._Wheels);
                Console.WriteLine("{0} build CC", this.GetType().Name);
    
                return new Car(this._Engine, this._Light, this._Wheels)
                {
                    Name = "CC"
                };
            }
        }


    public abstract class AbstractBuilder
    {

    
    

    public abstract void Engine();

    
    

    public abstract void Wheels();

    
    

    public abstract void Light();

    
    

    public abstract Car Build();
    }

    AbstractBuilder builder = new BuilderVolkswagen();
                        builder.Build();

    .NetCore 的也相似:

     public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();
        }

    这个模式的特点在于,可以在Builder 内部,增加零件,而上层不用改动。在.Netcore上面代码中,把某些零件的创建暴露给上层。在配置中,有同样的用法:

     //
            // 摘要:
            //     /// Initializes a new instance of the Microsoft.AspNetCore.Hosting.WebHostBuilder
            //     class. ///
            public WebHostBuilder()
            {
                _hostingEnvironment = new HostingEnvironment();
                _configureServicesDelegates = new List<Action<WebHostBuilderContext, IServiceCollection>>();
                _configureAppConfigurationBuilderDelegates = new List<Action<WebHostBuilderContext, IConfigurationBuilder>>();
                _config = new ConfigurationBuilder().AddEnvironmentVariables("ASPNETCORE_").Build();
                if (string.IsNullOrEmpty(GetSetting(WebHostDefaults.EnvironmentKey)))
                {
                    UseSetting(WebHostDefaults.EnvironmentKey, Environment.GetEnvironmentVariable("Hosting:Environment") ?? Environment.GetEnvironmentVariable("ASPNET_ENV"));
                }
                if (string.IsNullOrEmpty(GetSetting(WebHostDefaults.ServerUrlsKey)))
                {
                    UseSetting(WebHostDefaults.ServerUrlsKey, Environment.GetEnvironmentVariable("ASPNETCORE_SERVER.URLS"));
                }
                _context = new WebHostBuilderContext
                {
                    Configuration = _config
                };
            }
    气功波(18037675651)
  • 相关阅读:
    【个人】排序练习
    lintcode:二叉树的层次遍历
    lintcode:子集 & 带重复元素的子集
    lintcode:全排列&带重复元素的排列
    5.2哈夫曼树——哈夫曼树与哈夫曼编码
    5.1 堆 —— 堆的定义与操作
    04-树7 二叉搜索树的操作集
    04-树6 Complete Binary Search Tree
    04-树5 Root of AVL Tree
    04-树4 是否同一棵二叉搜索树
  • 原文地址:https://www.cnblogs.com/qgbo/p/12208591.html
Copyright © 2011-2022 走看看