1. 程式人生 > >用Rider寫一個由Autofac管理資源的WebAPI應用程式

用Rider寫一個由Autofac管理資源的WebAPI應用程式

一:步驟和上一篇建立控制檯專案一樣,不過這次選擇的是.net core區域下的Asp.net web application,Type裡選擇Web API(Web API類似java裡的SpringBoot,而MVC則類似java裡的SpringMVC);

二:注意它會預設建立一個在專案根目錄下的Controllers目錄,這個在實際專案裡一般不會這麼做,而是寫一個儘可能簡單的WebApi啟動Project,而且這個Project一般的命名規範是Com.Xxx.ArtifactName.Entrance;

然後在建立其他的專案供這個啟動專案來引用使用,在其他專案裡命名也是Com.Xxx.ArtifactName.UserModule,表示這個是Artifact專案的User部分,然後才是Controller、Service、Service.Impl、Db、Db.Dao、Db.Service、Db.Service.Impl、Enums等等;

不過我們只是為了演示,所以這裡就按建立的來;

三:我們為這個WebApi匯入Autofac包,注意這次要匯入一個額外的:Autofac.Extensions.DependencyInjection用於替換WebApi裡預設的簡單的IOC容器;

四:修改Startup類【注意這個類的實現是按照約定大於配置的方式,而不是通過實現什麼介面來規定行為的】,找到public void ConfigureServices(IServiceCollection services),將它改為:

public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddControllersAsServices();
            var builder = new ContainerBuilder();
            builder.Populate(services);
            // 這裡還可以手動注入其他的如Service層的bean,不過可以register一個Module(不會管理這個物件只是起個過渡作用)然後在Module裡去註冊其他bean(可以掃描自己的配置和Assembly來實現自定義的一些配置)
            var container = builder.Build();
            return new AutofacServiceProvider(container);
        }

  這裡再強調一下,如果要管理已經注入的Controller,和注入及裝配其他的Bean需要自己手動新增程式碼去注入,可以通過掃描自定義配置來實現Aop(Castle),和通過反射實現所有符合條件的bean的自動注入及通過反射實現這些bean的特定的屬性的自動裝配;

可以通過:Console.WriteLine(container.Resolve<IList<ValuesController>>().Count);得出是1,說明Controller注入到Autofac成功;