今天用.net core + Autofac 准备建一个WebAPI的项目。在使用Autofac进行注入的时候遇到了问题。无法加载相应的应用程序集
项目结构如下所示:
我使用的是配置文件进行相关服务的注册 Startup.cs文件改为:
代码:
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
配置:
{
"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文件夹里:
但是。。。。在调试项目的时候却发生了奇怪的事:
显示'API.Services.UserServices,API.Services' could not be found.It may require assembly qualification,
不知道什么原因。发下博文看看有没有人遇到一样的问题。
如果找到原因会更新博客
未完待续...........
----------------------------------------------------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文件夹里即可。
配置文件中的这些程序集不要忘写了。
-------ps-------
如果还是找不到程序集的话要仔细检查atuofac.json这个配置文件里的程序集名称是否拼写正确(我上面的配置文件就把API.Repoistory 写成了 API.Repository)API.Repoistory 这个程序集的名称是对的但是单词拼错了