У меня есть интерфейс "IItemsChanger", который реализует разные классы.
public interface IItemsChanger
{
void Change(int value)
}
Одна из возможных реализаций - это простой класс, который получает объект item, который может быть разным:
public class MyItemChanger : IItemChanger
{
private readonly IEnumerable<MyItem> _items;
public ArticoliStateChanger(IEnumerable<MyItem> items)
{
_items = items;
}
public void Change(int value)
{
...
}
}
Как вы можете видеть, конструктор имеет IEnumerable из MyItem;в другой реализации MyItem может быть заменен другим IEnumerable.
Я хочу, чтобы список MyItem внедрялся через конструктор в мою реализацию, поэтому мне нужно построить фабрику.Поскольку элементы могут иметь различный тип, я также должен сохранять фабрику как общую, например:
public interface IItemsChangerFactory<T>
{
IItemsChanger Create(IEnumerable<T> items);
}
Если это имеет смысл, я настроил Ninject следующим образом:
Bind(typeof(IItemsChangerFactory<>)).ToFactory();
Bind<IItemsChanger>().To<MyItemChanger>();
Когда япопытайтесь получить реализацию, подобную этой:
var kernel = new StandardKernel(new MyModule());
var k = kernel.Get<IItemsChangerFactory<MyItem>>();
Я получаю ошибку:
"Невозможно привести объект типа 'Castle.Proxies.ObjectProxy' к типу 'MyNamespace.IItemsChangerFactory`1 [MyItem] '
Как это можно исправить?