У меня есть небольшая структура внедрения зависимостей, и я пытаюсь заставить ее разрешать 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<>
. Любая идея?
Ваше здоровье.