Файлы конфигурации и гибкость приложений
Файлы конфигурации и гибкость приложений
Для повышения гибкости своих приложений ADO.NET вы можете на стороне клиента использовать файл *.config, в котором в рамках элемента ‹appSettings› можно указать пользовательские пары ключей и значений. Вспомните из главы 11, что пользовательские даяние можно прочитать программно с помощью типов из пространства имен System.Configuration. Предположим, что в файле конфигурации вы указали строки соединения и поставщика данных так, как показано ниже.
‹configuration›
‹appSettings›
‹add key="provider" value="SqlServer" /›
‹add key="cnStr" value="Data Source=localhost;uid=sa;pwd=;Initial Catalog=Pubs"/›
‹/appSettings›
‹/configuration›
В этом случае вы можете добавить в Main() строки, обеспечивающие программное чтение этих значении. В результате вы, по существу, создадите источник (т.е. генератор) поставщика данных. Вот как может выглядеть соответствующая модификация указанного метода.
static void Main(string[] args) {
// Чтение значения ключа provider.
string dpStr = ConfigurationManager.AppSettings["provider"];
DataProvider dp = (DataProvider)Enum.Parse(typeof(DataProvider), dpStr);
// Чтение значения cnStr.
string cnStr = ConfigurationManager.AppSettings["cnStr"];
// Получение соединения.
IDbConnection myCn = GetConnection(dp);
myCn.ConnectionString = cnStr;
}
Замечание. Тип ConfigurationManager появился в .NET 2.0. He забудьте также установить ссылку на компоновочный блок System.Configuration.dll и указать using для пространства имен System.Configuration.
Если предыдущий пример преобразовать в библиотеку программного кода .NET (а не в консольное приложение), вы получите возможность создать любое число клиентов, которые могут устанавливать свои соединения, используя различные уровни абстракции. Но чтобы построить действительно полезную библиотеку, реализующую возможности источника поставщика данных, вы должны также использовать объекты команд, объекты чтения данных, адаптеры данных и другие типы, связанные с обработкой данных. Хотя построить такую библиотеку программного кода будет не слишком сложно, для нее потребуется весьма большой по объему программный код. К счастью, что касается .NET 2.0, добрые люди из Редмонда уже встроили все необходимое в библиотеки базовых классов,
Исходный код. Проект MyConnectionFactory размещен в подкаталоге, соответствующем главе 22.