.NET 4.x Если я не знаю, экземпляр какого класса создавать до компиляции, как быть? - C#
Формулировка задачи:
Доброго времени суток.
Помогите, пожалуйста, решить проблему:
Есть интерфейс, от которого наследуются два класса.
В интерфейсе определены методы для работы с информацией.
А каждый из двух классов реализует эти методы с сохранением данных в БД, и в XML соответственно.
Во время выполнения программы пользователь сам выбирает место хранения информации.
Следовательно экземпляр какого-то из этих двух классов должен создаваться во время выполнения приложения.
Поясните, пожалуйста, как это реализовать.
Вроде бы для этого существует dependency injection, но аналогичных примеров в сети нет.
Если бы кто-то из форумчан, объяснил, как это можно сделать с помощью внедрения зависимостей, было бы здорово.
Не обязательно именно в данном контексте.
Просто хотелось бы посмотреть на пример, где во время выполнения программы решается экземпляр какого класса создавать с помощью dependency injection.
Заранее спасибо
Решение задачи: «.NET 4.x Если я не знаю, экземпляр какого класса создавать до компиляции, как быть?»
textual
Листинг программы
public class Program { private static void Main() { bool xml = true; string type1 = xml ? "XML" : "DB"; IRepository<int> repository1 = Factory.GetRepository<int>(type1); xml = false; string type2 = xml ? "XML" : "DB"; IRepository<double> repository2 = Factory.GetRepository<double>(type2); } static class Factory { public static IRepository<T> GetRepository<T>(String type) { switch (type) { case "XML": return new XmlRepository<T>(); case "DB": return new DBRepository<T>(); default: throw new ArgumentException(); } } } interface IRepository<T> { T Create(T entity); void Update(T entity); void Delete(T entity); } private class XmlRepository<T> : IRepository<T> { public XmlRepository() { Console.WriteLine("XmlRepository created with Type {0}", typeof(T).Name); } public T Create(T entity) { throw new NotImplementedException(); } public void Update(T entity) { throw new NotImplementedException(); } public void Delete(T entity) { throw new NotImplementedException(); } } private class DBRepository<T> : IRepository<T> { public DBRepository() { Console.WriteLine("DataBaseRepository created with Type {0}", typeof (T).Name); } public T Create(T entity) { throw new NotImplementedException(); } public void Update(T entity) { throw new NotImplementedException(); } public void Delete(T entity) { throw new NotImplementedException(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д