我遇到了一个问题,无法将泛型类强制转换为其实现的接口。
我的代码如下:
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);
如果尝试将类型为Lazy<bar>
的项目转换为Lazy<foo>
时出现无效转换异常(InvalidCastException),有没有办法让CLR识别这种类型转换或解决这个问题?