【问题标题】:How to access service of another project in same solution如何在同一解决方案中访问另一个项目的服务
【发布时间】:2020-05-08 14:32:38
【问题描述】:

我有一个控制台应用程序 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# .net configuration autofac autofac-module


    【解决方案1】:

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

    让我知道你的想法! Rgrds!

    【讨论】:

    • Web 应用程序的 appsettings 包含数据库凭据和其他非常特定于数据库的设置,这些设置仅在从 B 的服务调用的存储库中使用。将这些设置添加到 A 是不是有点奇怪(从不直接使用任何这些设置)?
    【解决方案2】:

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

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

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

    假设您有A 和B,您可以创建一个名为C 的新库项目,A 和C 都将引用它。然后在C 中,您可以创建一个c.settings.json 文件并在您的配置文件中使用它。为了让构建过程自动将c.settings.json 文件复制到每个项目,您可以将Visual Studio 中的copy to Output Directory 属性设置为Copy always

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多