1

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

4

2 回答 2

0

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

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

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

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

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

在此处输入图像描述

在此处输入图像描述

于 2020-01-22T12:59:43.763 回答
0

请记住,在部署管道中使用 .config 文件转换是很常见的,那么,您真的要部署具有不同配置的两个不同应用程序吗?如果没有,将配置放在正在运行的应用程序中应该是有意义的。

让我知道你的想法!Rgrds!

于 2020-01-22T12:41:07.337 回答