public AnnotatedHandlerInspector <C> Inspect <C>() { return(AnnotatedHandlerInspector <C> .CreateInspector <C>( parameterResolverFactory, handlerDefinition, registry )); }
private static AnnotatedHandlerInspector <C> CreateInspector <C>( Type inspectedType, IParameterResolverFactory parameterResolverFactory, IHandlerDefinition handlerDefinition, Dictionary <Type, AnnotatedHandlerInspector <T> > registry) { if (!registry.ContainsKey(inspectedType)) { registry.Add(inspectedType, AnnotatedHandlerInspector.Initialize <C>( parameterResolverFactory, handlerDefinition, registry) ); } //noinspection unchecked return(registry[inspectedType]); }
private static AnnotatedHandlerInspector <C> Initialize <C>( IParameterResolverFactory parameterResolverFactory, IHandlerDefinition handlerDefinition, Dictionary <Type, AnnotatedHandlerInspector <C> > registry) { var inspectedType = typeof(C); List <AnnotatedHandlerInspector <T> > parents = new List <AnnotatedHandlerInspector <T> >(); foreach (Type iFace in inspectedType.GetInterfaces()) { //noinspection unchecked parents.Add( CreateInspector( iFace, parameterResolverFactory, handlerDefinition, registry ) ); } if (inspectedType.BaseType != null && typeof(object) != inspectedType.BaseType) { parents.Add( CreateInspector(inspectedType.BaseType, parameterResolverFactory, handlerDefinition, registry) ); } AnnotatedHandlerInspector <T> inspector = new AnnotatedHandlerInspector <T>( inspectedType, parents, parameterResolverFactory, handlerDefinition, registry ); inspector.InitializeMessageHandlers(parameterResolverFactory, handlerDefinition); return(inspector); }