今天用.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 這個程式集的名稱是對的但是單詞拼錯了