private void PrecacheReflections(Type controllerType)
{
var defaultConstructor = controllerType.GetConstructors().FirstOrDefault(x => x.GetParameters().Length == 0);
if (defaultConstructor == null) throw new ArgumentException("StatementHandler " + controllerType.Name + " does not have a default constructor");
activator = FastFlect.GetActivator(defaultConstructor);
delegateForScopeSetter = controllerType.DelegateForSetPropertyValue("Scope");
delegateForContextSetter = controllerType.DelegateForSetPropertyValue("Context");
delegateForAttachmentsSetter = controllerType.DelegateForSetPropertyValue("Attachments");
delegateForTracerSetter = controllerType.DelegateForSetPropertyValue("Tracer");
delegateForInvokation = definition.MethodInfo.DelegateForCallMethod();
if (definition.TransformsScopeTo != null)
{
scopeConverter = StaticAnalysis.CreateConverter(definition.TransformsScopeTo);
transformsToValueType = definition.TransformsScopeTo.IsValueType;
}
}