Еще один вариант - использовать инструмент, подобный Dynamic Proxy , и смешивать реализации репозитория.Это избавило бы вас от необходимости создавать реализацию перенаправления вручную.
Пример:
public class Product
{
}
public interface IProductRepository
{
void Save(Product p);
}
public class ProductRepository : IProductRepository
{
public void Save(Product p)
{
Console.WriteLine("Saved Product");
}
}
public class File
{
}
public interface IFileRepository
{
void Save(File f);
}
public class FileRepository : IFileRepository
{
public void Save(File f)
{
Console.WriteLine("Saved File");
}
}
public class Repository
{
}
Создать миксин:
var options = new ProxyGenerationOptions();
options.AddMixinInstance(new ProductRepository());
options.AddMixinInstance(new FileRepository());
var generator = new ProxyGenerator();
var proxy = (Repository)generator.CreateClassProxy(typeof(Repository), options);
(proxy as IProductRepository).Save(new Product());
(proxy as IFileRepository).Save(new File());
Как-то у меня такое чувствоВы также должны быть в состоянии объединить свои интерфейсы и прокси на этом.Что-то в этом роде:
public interface IFullRepository : IProductRepository, IFileRepository
{
}
var proxy = (IFullRepository)generator.???
Я не нашел способа заставить его работать - возможно, спросите ребят из Dynamic Proxy.