2016-03-30 3 views
2

Я написал приложение C# и хотел бы высмеять значения конфигурации. Например, я настраиваю путь для создания файла на удаленном компьютере и хотел бы его локально создать при тестировании.Как насмехаться с конфигурацией для приложения C#

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

public interface IConfigurationProvider 
{ 
    string GetFileOutputPath(string path); 
} 

public class ConfigurationWrapper : IConfigurationProvider 
{ 
    return ConfigurationManager.AppSettings.Get("FileOutputPath"); 
} 

Конфигурация:

<configuration> 
    <appSettings> 
     <add key="FileOutputPath" value="RemoteServerPath" /> 
    </appSettings> 
</configuration> 

Этот подход уверен делает работу, но это лучшая практика для этого сценария?

+0

Вы имеете в виду, что вы настроили конфигурацию в своих тестовых проектах app.config? Это то, что я всегда делал, и у меня не было никаких проблем. –

+0

Вот как я всегда это делал, и все работает нормально. Я согласен, что кажется, что должен быть лучший способ, но я его не нашел. С веб-приложениями мы получаем web.config, web.debug.config и web.release.config, и он отлично работает. Хотелось бы, чтобы мы могли сделать это с помощью app.config, но я никогда не смог заставить его работать. – ManOVision

ответ

1

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

Вот вариант вашего подхода. (в основном обеспечивает ту же функциональность)

using System.Configuration; 

public interface IApplicationSettings { 
    string this[string setting] { get; } 
} 

public class ConfigAppSettings : IApplicationSettings { 
    public string this[string setting] { 
     get { return ConfigurationManager.AppSettings[setting]; } 
    } 
} 

public interface IConnectionStrings { 
    string this[string name] { get; } 
} 

public class ConfigConnectionStrings : IConnectionStrings { 
    public string this[string name] { 
     get { return ConfigurationManager.ConnectionStrings[name].ConnectionString; } 
    } 
} 
Смежные вопросы