У меня есть форма, которая показывает три элемента в поле со списком.
Континенты, страны и города
Если я выберу предмет, например если я выбираю «Города», а затем нажимаю кнопку «Получить результаты», я отправляю команду выбора в базу данных через слой данных и бизнеса, который затем получает список городов типа.
Список затем привязывается к сетке в форме пользовательского интерфейса.
Классы: Континенты, Страны и Города реализуют интерфейс IEntities со строкой свойства "Имя".
Событие нажатия кнопки вызывает бизнес-уровень, используя:
click(object sender, EventArgs e)
{
string selectedItem = comboBox.SelectedItem;
IEntities entity = null;
List<IEntities> list = null;
if (selectedItem == "Cities")
{
entity = new Cities("City");
}
if (selectedItem == "Continents")
{
entity = new Continents("Continents");
}
if (selectedItem == "Countries")
{
entity = new Countries("Countries");
}
//Then I call a method in Business Layer to return list
BL bl = new BL(entity);
list = bl.GetItems();
myDataGrid.DataContext = list;//to bind grid to the list
}
Бизнес-уровень выглядит следующим образом:
public class BL
{
public IEntities _entity;
//constructor sets the variable
public BL(IEntity entity)
{
_entity = entity;
}
public IList<Entities> GetItems()
{
//call a method in data layer that communicates to the database
DL dl = new DL();
return dl.CreateItemsFromDatabase(_entity.Name);//name decides which method to call
}
}
Я хочу использовать Unity в качестве IOC, поэтому вместо использования фабричного (своего рода) шаблона в событии нажатия кнопки с помощью if then elses и использования жестко закодированных имен классов, я хочу использовать конфигурацию контейнера, которая создает соответствующий экземпляр класса. И когда экземпляр IEntities передается в конструктор класса BL, я хочу передать объект с помощью Unity. Подскажите пожалуйста, как это сделать?