/// <summary> /// THttpApi的实例创建器抽象 /// </summary> /// <param name="actionDescriptorProvider"></param> /// <param name="actionInvokerProvider"></param> /// <exception cref="ArgumentException"></exception> /// <exception cref="NotSupportedException"></exception> public HttpApiActivator(IApiActionDescriptorProvider actionDescriptorProvider, IApiActionInvokerProvider actionInvokerProvider) { var interfaceType = typeof(THttpApi); this.ApiMethods = HttpApi.FindApiMethods(interfaceType); this.actionInvokers = this.ApiMethods .Select(item => actionDescriptorProvider.CreateActionDescriptor(item, interfaceType)) .Select(item => actionInvokerProvider.CreateActionInvoker(item)) .ToArray(); // 最后一步创建工厂 this.factory = this.CreateFactory(); }
/// <summary> /// 运行时使用Emit动态创建THttpApi的代理类和代理类实例 /// </summary> /// <param name="apiActionDescriptorProvider"></param> /// <param name="actionInvokerProvider"></param> /// <exception cref="ArgumentException"></exception> /// <exception cref="NotSupportedException"></exception> public DefaultHttpApiActivator(IApiActionDescriptorProvider apiActionDescriptorProvider, IApiActionInvokerProvider actionInvokerProvider) : base(apiActionDescriptorProvider, actionInvokerProvider) { }
/// <summary> /// 通过查找类型代理类型创建实例 /// </summary> /// <param name="apiActionDescriptorProvider"></param> /// <param name="actionInvokerProvider"></param> /// <exception cref="ArgumentException"></exception> /// <exception cref="NotSupportedException"></exception> public SourceGeneratorHttpApiActivator(IApiActionDescriptorProvider apiActionDescriptorProvider, IApiActionInvokerProvider actionInvokerProvider) : base(apiActionDescriptorProvider, actionInvokerProvider) { }