В MVC, чтобы упростить тестирование и макетирование, я склонен использовать настраиваемый объект для всех общих классов, таких как Request, Session и ConfigManager, на которые ссылаются через интерфейсы.
Очевидно, вам не нужно реализовывать классы с нуля, поэтому ваша реализация может быть оболочкой, которая фактически использует класс .net под капотом, но которая также дает возможность вставить некоторую пользовательскую логику в середине, как в вашей случай.
Следовательно, вы можете создать оболочку webconfigurationManager с помощью метода, подобного GetAppConfig (ключ), содержащего вашу собственную логику.
Играть с концепцией внедрения зависимостей тогда достаточно просто, если этот класс доступен там, где он вам нужен.
Поэтому приведем простой пример:
//this will be injected
public MyControllerCtor(IConfig cfg)
public interface IConfig
{
string GetAppConfig(string key);
}
public class myConfig:IConfig
{
public string GetAppConfig(string key)
{
//your logic
var someVar = WebConfigurationManager.AppSettings["SomeProperty"];
//your logic
return yourCustomAppSetting;
}
}
Большим преимуществом этого подхода является то, что если вы хотите сохранить свою конфигурацию в базе данных или службе и изменить свой код, вам просто нужно изменить реализацию интерфейса и внедрить новый экземпляр.