一、创建类库
项目结构如图,创建Model、IRepo、Repo、IServ、Serv五个类库
二、在Controllers里面调用
public WeatherForecastController(ILogger<WeatherForecastController> logger,IDemoServ demoServ)
{
_logger = logger;
_demoServ = demoServ;
}
/// <summary>
/// 获取Demo数据
/// </summary>
/// <returns></returns>
[HttpGet]
public string GetDemos() {
var demo = _demoServ.GetDemos();
return "";
}
三、引入Autofac包
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
四、在Program.cs中添加工厂服务者
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory()) //工厂服务者
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
五、在Startup.cs中添加如下方法
public void ConfigureContainer(ContainerBuilder builder)
{
var basePath = AppContext.BaseDirectory;
var servicesDllFile = Path.Combine(basePath, "AdminCore.Serv.dll");
var repositoryDllFile = Path.Combine(basePath, "AdminCore.Repo.dll");
if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile)))
{
var msg = "Repo.dll和serv.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";
throw new Exception(msg);
}
// 获取 Service.dll 程序集服务,并注册
var assemblysServices = Assembly.LoadFrom(servicesDllFile);
builder.RegisterAssemblyTypes(assemblysServices)
.AsImplementedInterfaces()
.InstancePerDependency()
.PropertiesAutowired();
// 获取 Repository.dll 程序集服务,并注册
var assemblysRepository = Assembly.LoadFrom(repositoryDllFile);
builder.RegisterAssemblyTypes(assemblysRepository)
.AsImplementedInterfaces()
.PropertiesAutowired()
.InstancePerDependency();
}