Наличие в вашей библиотеке свойств чтения непосредственно из файла app.config по всему коду сделает ваш код хрупким и трудным для тестирования. Было бы лучше иметь класс, отвечающий за чтение конфигурации и сохранение значений конфигурации строго типизированным способом. Пусть этот класс либо реализует интерфейс, который определяет свойства из конфигурации, либо делает свойства виртуальными. Затем вы можете макетировать этот класс (используя фреймворк, такой как RhinoMocks, или вручную создав поддельный класс, который также реализует интерфейс). Вставьте экземпляр класса в каждый класс, которому требуется доступ к значениям конфигурации через конструктор. Настройте его так, чтобы, если введенное значение было нулевым, оно создавало экземпляр соответствующего класса.
public interface IMyConfig
{
string MyProperty { get; }
int MyIntProperty { get; }
}
public class MyConfig : IMyConfig
{
public string MyProperty
{
get { ...lazy load from the actual config... }
}
public int MyIntProperty
{
get { ... }
}
}
public class MyLibClass
{
private IMyConfig config;
public MyLibClass() : this(null) {}
public MyLibClass( IMyConfig config )
{
this.config = config ?? new MyConfig();
}
public void MyMethod()
{
string property = this.config.MyProperty;
...
}
}
Test
public void TestMethod()
{
IMyConfig config = MockRepository.GenerateMock<IMyConfig>();
config.Expect( c => c.MyProperty ).Return( "stringValue" );
var cls = new MyLib( config );
cls.MyMethod();
config.VerifyAllExpectations();
}