Как получить доступ к услуге другого проекта в том же решении - PullRequest
1 голос
/ 22 января 2020

У меня есть консольное приложение A и веб-приложение B, где A необходимо использовать класс обслуживания в B. Чтобы справиться с зависимостями, я попытался создать модуль autofa c в B, который зарегистрирован в методе Main A:

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 читает appSettings из A ...

Есть ли способ сделать службы, зарегистрированные в модуль читать из appsettings B вместо? Или модули автофа c - это неправильный подход к использованию здесь?

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Конфигурационный файл предназначен для каждого приложения. Это означает, что у вас будет один файл конфигурации для каждого приложения. В вашем случае у вас будет файл конфигурации для вашего консольного приложения и еще один для вашего веб-приложения.

Если некоторые настройки применяются к обоим приложениям, обычно дублируют эти настройки в каждом файле конфигурации.

Если вы хотите иметь один файл конфигурации для части вашего приложения, вы можете создать проект библиотеки с файлом пользовательских настроек.

Допустим, у вас есть A и B, вы можете создать новый библиотечный проект с именем C, на который будут ссылаться как A, так и C. Затем в C вы можете создать файл c.settings.json и в своем файле конфигурации и использовать его. Чтобы процесс сборки автоматически копировал файл c.settings.json в каждый проект, можно установить для свойства copy to Output Directory в Visual Studio значение Copy always

Ваше решение должно выглядеть примерно так:

enter image description here

enter image description here

0 голосов
/ 22 января 2020

Имейте в виду, что очень часто используются преобразования файлов .config в конвейерах развертывания, так что вы действительно хотите развернуть два разных приложения с разными конфигурациями? Если нет, то вставка confing в ваше работающее приложение имеет смысл.

Дайте мне знать, что вы думаете! Rgrds!

...