У меня проблема с приведением универсального класса к интерфейсу, который он реализует.
Мой код такой:
interface foo
{
void foobar();
}
class bar: foo
{
public void foobar()
{
throw new NotImplementedException();
}
}
теперь у меня есть фабрика, которая создает экземпляры моих классов по интерфейсу, в основном это простое микроядро (локатор служб). Я упросту это здесь. Обычно он ищет класс реализации из конфигов, а фабрика принимает тип как T, но это не имеет значения для моей проблемы.
public static class Factory
{
public static Lazy<foo> CreateLazyInstance()
{
Lazy<foo> instance;
Type type = typeof(bar);
Type lazyType = typeof(Lazy<>);
Type toContruct = lazyType.MakeGenericType(type);
instance = (Lazy<foo>)Activator.CreateInstance(toContruct);
return instance;
}
}
Если не получится при:
instance = (Lazy<foo>)Activator.CreateInstance(toContruct);
и с InvalidCastException утверждают, что невозможно привести тип Lazy<bar>
к Lazy<foo>
.
Есть ли способ сообщить CLR, что это приведение будет работать или обойти эту проблему?