c# - 如何在同一解决方案中访问另一个项目的服务
问题描述
我有一个控制台应用程序 A 和一个 Web 应用程序 B,其中 A 需要使用 B 中的服务类。为了处理依赖关系,我尝试在 B 中创建一个在 A 的 Main 方法中注册的 autofac 模块:
public class ImageServiceModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<ImageService>().As<IImageService>();
...
var configurationBuilder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
var configuration = configurationBuilder.Build();
var services = new ServiceCollection();
services.Configure<StorageSettings>(configuration.GetSection("StorageSettings"));
builder.Populate(services);
}
}
现在,问题是由于程序是在 A 的上下文中运行的,B 从 A 读取 appSettings ...
有没有办法让模块中注册的服务从 B 的 appsettings 中读取?还是首先在这里使用 autofac 模块是一种错误的方法?
解决方案
配置文件被设计为每个应用程序。这意味着您将为每个应用程序拥有一个配置文件。在您的情况下,您将拥有一个用于控制台应用程序的配置文件和另一个用于您的 Web 应用程序的配置文件。
如果某些设置适用于两个应用程序,则通常会在每个配置文件中复制这些设置。
如果您想为应用程序的一部分创建一个配置文件,您可以使用自定义设置文件创建一个库项目。
假设您拥有A
and B
,您可以创建一个名为的新库项目,并由andC
引用。然后你可以在你的配置文件中创建一个文件并使用它。为了让构建过程自动将文件复制到每个项目,您可以将Visual Studio 中的属性设置为A
C
C
c.settings.json
c.settings.json
copy to Output Directory
Copy always
您的解决方案应如下所示: