【发布时间】:2013-10-24 01:40:03
【问题描述】:
我有一个小的依赖注入框架,我试图让它动态解析Lazy<> 实例。我们的想法是做这样的事情:
DIContainer.Register<IDbCommand,SqlCommand>();
var lazyCommand = DIContainer.Resolve<Lazy<IDbCommand>>();
前几天我读到 Autofac 能够做到这一点。
我一直在尝试为 Lazy<> 实例设置构造函数。在下一个测试代码中,由于所需的类型构造函数期望 Func<arg>,而引发异常,但我传递的是 Func<Object>:
static readonly Type _lazyType = typeof(Lazy<>);
static Object ResolveTest(Type type)
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == _lazyType)
{
var arg = type.GetGenericArguments()[0];
return Activator.CreateInstance(_lazyType.MakeGenericType(arg), new Func<Object>(() => ResolveType(arg)));
}
else
return ResolveType(type);
}
我不知道如何创建适合 Lazy<> 构造函数参数的委托。有什么想法吗?
干杯。
【问题讨论】:
-
这是一个棘手的问题,但您应该能够以相同的方式创建任何泛型类型。 msdn.microsoft.com/en-us/library/b8ytshk6.aspx 可能会帮助您朝着正确的方向前进。
标签: c# reflection func