天天看点

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 进行依赖注入遇到的问题