天天看點

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

今天用.net core + Autofac 準備建一個WebAPI的項目。在使用Autofac進行注入的時候遇到了問題。無法加載相應的應用程式集

項目結構如下所示:

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

我使用的是配置檔案進行相關服務的注冊 Startup.cs檔案改為:

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

代碼:

public IServiceProvider ConfigureServices(IServiceCollection services) //這個方法的傳回類型改為 IServiceProvider
        {
            services.AddMvc();

            //configuration
            IConfigurationBuilder config = new ConfigurationBuilder();
            config.AddJsonFile("autofac.json");
            var module = new ConfigurationModule(config.Build());
            var containerBuilder = new ContainerBuilder();
            containerBuilder.RegisterModule(module);
            containerBuilder.Populate(services);
            var container = containerBuilder.Build();
            return new AutofacServiceProvider(container);
        }
           

Autofac配置檔案autofac.json

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

配置:

{
  "components": [
    {
      "type": "API.Services.UserServices, API.Services",
      "services": [
        {
          "type": "API.IServices.IUserServices, API.IServices"
        }
      ],
      "injectProperties": true
    },
    {
      "type": "API.Repoistory.UserRepository, API.Repoistory",
      "services": [
        {
          "type": "API.IRepoistory.IUserRepository, API.IRepoistory"
        }
      ],
      "injectProperties": true
    }
  ]
}
           

API.Services、API.IServices、API.Repository、API.IRepository 項目的生成路徑全都改到了APITest項目的bin檔案夾裡:

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

但是。。。。在調試項目的時候卻發生了奇怪的事:

顯示'API.Services.UserServices,API.Services' could not be found.It may require assembly qualification,

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

不知道什麼原因。發下博文看看有沒有人遇到一樣的問題。

如果找到原因會更新部落格

未完待續...........

----------------------------------------------------2018.5.15 更新 -------------------------------------------------------

找不到API.Services這個程式集的原因找到了,因為沒有在APITest項目中引用API.Service、API.Repoistory引起的,Autofac進服務注冊時相應的應用程式集必須要進行加載。雖然這樣沒有直接的依賴關系(引用API.Services、API.Repoistory中的類),但總感覺還是有依賴存在。

在使用Asp.Net MVC開發時 如果使用Castle.Windsor容器進行服務的注冊可以不用添加引用。直接把 API.IServices 和 API.Services 生成到 APITest 的bin檔案夾裡即可。

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題

配置檔案中的這些程式集不要忘寫了。

-------ps-------

如果還是找不到程式集的話要仔細檢查atuofac.json這個配置檔案裡的程式集名稱是否拼寫正确(我上面的配置檔案就把API.Repoistory 寫成了 API.Repository)API.Repoistory 這個程式集的名稱是對的但是單詞拼錯了

asp.net core 2.0 webapi 使用 Autofac 進行依賴注入遇到的問題