Имам уеб услуга за извършване на CRUD операция. Имам интерфейс на IProductRepository, внедрен от XMLProductRepository и SQLProductRepository.
Сега използвам екземпляра на хранилището в моя контролер на уеб услугата, за да извикам операции Get/Put/POST и Delete, които са дефинирани съответно в XMLRepository и SQLRepository. Но малко се обърквам как да променям динамично между тези две хранилища, тъй като искам да направя моята база данни на уеб услуга агностична
public interface IProductRepository
{
IEnumerable<Product> GetAll();
Product Get(int id);
Product Add(Product item);
void Remove(int id);
bool Update(Product item);
}
public class XMLProductRepository : IProductRepository
{
public XMLProductRepository() {}
public IEnumerable<Product> GetAll() {}
public Product Get(int id) {}
public Product Add(Product item) {}
public void Remove(int id) {}
public bool Update(Product item) {}
}
public class SQLProductRepository : IProductRepository
{
public SQLProductRepository() {}
public IEnumerable<Product> GetAll() {}
public Product Get(int id) {}
public Product Add(Product item) {}
public void Remove(int id) {}
public bool Update(Product item) {}
}
public class ProductController : ApiController
{
static readonly IProductRepository repository = new XMLProductRepository();
// REST OF THE CODE AND IMPLEMENTATION HERE...
// using the repository object
}
Въпросът е как да го направя динамичен тук, вместо да дефинирам конкретния обект на хранилище в контролера? Или въпросът е мога ли дори да направя това за този WEB API?
Позволете ми да добавя допълнителни подробности към Въпроса - Благодаря на Dillie-O, че го посочи.
Изискването, което имам, е „Източниците са взаимно изключващи се. Във всеки един момент услугата избира информация само от един източник или XML, или SQL. Услугата трябва да може да превключва между източници без знание на клиента. В допълнение към този WEB API на услугата не трябва да се променя винаги, когато източникът ми се промени."