ASP.NET Core1.0 帶來的新特性

FrankYou發表於2016-06-15

1、採用新的檔案系統,不再通過工程檔案(.sln和.csproj)來定義專案檔案清單。

解決方案檔案還是*.sln,但專案檔案變成*.xproj了。在專案資料夾下新增的檔案會被自動新增到專案中,不用再手動地執行把此檔案包含在專案中。

2、Startup類

該類可以看作是整個ASP.NET Core的入口,該類主要存在3個方法:

  1. Main--入口方法;
  2. ConfigureServices--向IoC容器註冊元件;
  3. Configure--註冊Mideware

也許你第一次見到這個類會有點不明覺厲,該類中3個方法既沒有介面約束,也沒有從父類繼承。微軟在該處採用了這樣一種約定:必須要存在一個名叫Startup的類,同時該類必須要存在上面提到的3個方法,該ASP.NET專案才能順利執行成功。

3、讀取Appsetting

由於已經不再存在web.config檔案,所以新的Appsetting也採取了更加通用的設計。在新建專案的時候VS已經幫我們新增了預設的appsettings.json檔案。如下的配置:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

 同時在Startup類的建構函式中將appsettings.json檔案新增到了ConfigurationBuilder物件中:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", true, true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

 同時我們還可以看到一個環境變數env.EnvironmentName,這個設計也有利於我們區分DEV,FAT,UAT,PRD等不同的執行環境。這一變數可以在專案配置中設定(launchSettings.json):

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:60111/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "TodoApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000/api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

 

4、預設自帶IoC容器,統一依賴注入API

依賴注入技術從很大程度上使得程式碼更加模組化,會在一定程度上迫使你寫出低耦合,SRP的程式碼,另外有著良好設計的程式碼也具備更好的可測試性。

ASP.NET Core自己內建了一個非常輕量級的IoC容器,如以下程式碼:

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    // Add our respository type
    services.AddSingleton<ITodoRepository, TodoRepository>();
}

當然你可以引入第三方比較成熟的IoC容器,專案Dependency Injection定義了一組抽象,只需要將具體的IoC容器實現該抽象即可整合進ASP.NET Core中。就目前的情況來看ASP.NET Core內建的容器比較適合ASP.NET Core內部的組建使用,而實際業務依賴則可以使用第三方更強大的容器來註冊。

另外在ASP.NET Core新的設計中,不光Controller可以進行依賴注入,Filter,View以及ViewModel都可進行注入。這方面的內容比較多,也許會在單獨的文章中進行介紹。

5、中介軟體(Middleware

這一設計借鑑自OWIN katana 專案的管道設計。什麼是Middleware?下面這幅圖很好的描述了Middleware是如何在http請求過程中工作的。

 

6、統一MVC和WebAPI

ASP.NET Core統一了MVC和WebAPI,這表現在這兩者共用同一套程式碼,並且在開發過程中不用再繼承各自獨立的Controller基類了。

7、Razor頁面中引入新的Tag Helpers

8、其他一些特性如View Components,Caching…

 

相關文章