Идеальный способ - удалить зависимость конфигурации от DLL. DLL предназначена для использования приложением, а конфигурация принадлежит приложению, а не DLL.
В большинстве сценариев вы можете избавиться от зависимости / чтения из конфигурации в коде dll, используя внедрение зависимостей либо через DI-контейнер, либо через ручную компоновку.
если ваша dll поиска зависит от настроек, сделайте настройки зависимостью для вашего класса точки входа dll и перейдите к коду dll, предполагая, что ваш класс точки входа каким-то образом получает свои настройки.
Затем вы можете указать значение настроек из вашего приложения, будь то web / windows / console и считав из файла конфигурации / db / web service / file system.
пример кода:
В dll:
public interface ISearcherDirectorySettings
{
string[] SearchIndexPointers { get; }
}
public class Searcher
{
private readonly ISearcherDirectorySettings _searchDirctorySettings;
public Searcher(ISearcherDirectorySettings searchDirtorySettings)
{
_searchDirctorySettings = searchDirtorySettings;
}
public void SearchAlgorithm()
{
var indexes = _searchDirctorySettings.SearchIndexPointers;
// search code
}
}
В вашей заявке:
public class SearcherDirectorySettings : ISearcherDirectorySettings
{
private readonly string[] _pointers;
public SearcherDirectorySettings(string[] pointers)
{
_pointers = pointers;
}
public string[] SearchIndexPointers
{
get { return _pointers; }
}
}
public class ApplicationRootClass //Owns configuration file
{
const string FirstPointerKey = "File1";
const string SecondPointerKey = "File2";
private Func<string, string> _getFromConfig = key => ConfigurationManager.AppSettings[key];
public ApplicationRootClass()
{
var searcherDirectorySettings = new SearcherDirectorySettings(new[] { _getFromConfig(FirstPointerKey),_getFromConfig(SecondPointerKey) });
var searcher = new Searcher(searcherDirectorySettings);
searcher.SearchAlgorithm();
}
}
С этим вы можете добиться «быстрого отказа». Вы можете использовать поисковые библиотеки в любом приложении, и приложение будет отвечать за установку значений параметров.
Если вы в конечном итоге используете dll в нескольких приложениях / проектах и дублируете код класса настроек, у вас есть служебный компонент, который выполняет эту работу, или перемещаете класс настроек в dll, но оставляете экземпляр класса настроек для приложения.