Причина, по которой _factoryThunk
в настоящее время определяется как Func<IControllerFactory>
, заключается в том, что это общее средство для поддержки обеих перегрузок:
void SetControllerFactory(Type);
void SetControllerFactory(IControllerFactory);
Реализация первого использует тот факт, что _factoryThunk
является Func
, объявив, что Func
inline, используя Activator
для создания экземпляра Type
лениво:
this._factoryThunk = delegate {
IControllerFactory factory;
try
{
factory = (IControllerFactory) Activator.CreateInstance(controllerFactoryType);
}
catch (Exception exception)
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.ControllerBuilder_ErrorCreatingControllerFactory, new object[] { controllerFactoryType }), exception);
}
return factory;
};
Следовательно, причина, по которой другая перегрузка выглядит ложной реализацией, заключается в том, что, поскольку _factoryThunk
объявлен как Func
, предложенная вами строка даже не скомпилируется:
_factoryThunk = controllerFactory;
_factoryThunk
- это Func<IControllerFactory>
, тогда как controllerFactory
- это IControllerFactory
- несовместимые типы.