//public static TInterface CreateHandler<TInterface, THandler>(this IResolver resolver) where TInterface : class where THandler : IInterfaceHandler //{ // var typeInfo = CreateTypeInfo(typeof(TInterface), typeof(THandler)); // var obj = (TInterface)Resolver.CreateInstance(resolver, typeInfo); // return obj; //} public static TInterface CreateHandler <TInterface, THandler>(this IResolverSession session) where TInterface : class where THandler : IInterfaceHandler { var typeInfo = CreateTypeInfo(typeof(TInterface), typeof(THandler), session.Resolve <IMethodContextInfoProvider>()); var obj = (TInterface)session.CreateInstance(typeInfo); return(obj); }
protected virtual Func <IResolverSession, Tuple <TResult, Action> > GetFactory(IResolverSession session) { lock (this) { if (Factory != null) { return(Factory); } var constructors = typeInfo.GetConstructors().OrderByDescending(c => c.GetParameters().Length).ToArray(); foreach (var constructorInfo in constructors) { if (session.TryCreateInstance(constructorInfo, out var obj)) { var _cinfo = constructorInfo; Factory = (s) => { s.TryCreateInstance(_cinfo, out var instance); return(new Tuple <TResult, Action>((TResult)instance, null)); }; return((s) => new Tuple <TResult, Action>((TResult)obj, null)); } } Factory = (s) => { var instance = session.CreateInstance(typeInfo); return(new Tuple <TResult, Action>((TResult)instance, null)); }; return(Factory); } }