首页 > 解决方案 > 如何在同一解决方案中访问另一个项目的服务

问题描述

我有一个控制台应用程序 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 模块是一种错误的方法?

标签: c#.netconfigurationautofacautofac-module

解决方案


配置文件被设计为每个应用程序。这意味着您将为每个应用程序拥有一个配置文件。在您的情况下,您将拥有一个用于控制台应用程序的配置文件和另一个用于您的 Web 应用程序的配置文件。

如果某些设置适用于两个应用程序,则通常会在每个配置文件中复制这些设置。

如果您想为应用程序的一部分创建一个配置文件,您可以使用自定义设置文件创建一个库项目。

假设您拥有Aand B,您可以创建一个名为的新库项目,并由andC引用。然后你可以在你的配置文件中创建一个文件并使用它。为了让构建过程自动将文件复制到每个项目,您可以将Visual Studio 中的属性设置为ACCc.settings.jsonc.settings.jsoncopy to Output DirectoryCopy always

您的解决方案应如下所示:

在此处输入图像描述

在此处输入图像描述


推荐阅读