Ejemplo n.º 1
0
        /// <summary>
        /// 创建接口的实例
        /// </summary>
        /// <param name="interceptor">拦截器</param>
        /// <returns></returns>
        public THttpApi CreateInstance(IActionInterceptor interceptor)
        {
            var factory = Volatile.Read(ref _factory);

            if (factory == null)
            {
                Interlocked.CompareExchange(ref _factory, this.CreateFactory(), null);
                factory = _factory;
            }
            return(factory(interceptor));
        }
Ejemplo n.º 2
0
 internal Session(
     INetwork network,
     IAgendaInternal agenda,
     IWorkingMemory workingMemory,
     IEventAggregator eventAggregator,
     IActionExecutor actionExecutor,
     IDependencyResolver dependencyResolver,
     IActionInterceptor actionInterceptor)
 {
     _network           = network;
     _workingMemory     = workingMemory;
     _agenda            = agenda;
     _eventAggregator   = eventAggregator;
     _actionExecutor    = actionExecutor;
     _executionContext  = new ExecutionContext(this, _workingMemory, _agenda, _eventAggregator);
     DependencyResolver = dependencyResolver;
     ActionInterceptor  = actionInterceptor;
 }
Ejemplo n.º 3
0
 internal Session(
     INetwork network,
     IAgendaInternal agenda,
     IWorkingMemory workingMemory,
     IEventAggregator eventAggregator,
     IMetricsAggregator metricsAggregator,
     IActionExecutor actionExecutor,
     IIdGenerator idGenerator,
     IDependencyResolver dependencyResolver,
     IActionInterceptor actionInterceptor)
 {
     _network                 = network;
     _workingMemory           = workingMemory;
     _agenda                  = agenda;
     _eventAggregator         = eventAggregator;
     _metricsAggregator       = metricsAggregator;
     _actionExecutor          = actionExecutor;
     _executionContext        = new ExecutionContext(this, _workingMemory, _agenda, _eventAggregator, _metricsAggregator, idGenerator);
     DependencyResolver       = dependencyResolver;
     ActionInterceptor        = actionInterceptor;
     AutoPropagateLinkedFacts = true;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 创建THttpApi的代理实例
 /// </summary>
 /// <typeparam name="THttpApi"></typeparam>
 /// <param name="actionInterceptor">Action拦截器</param>
 /// <exception cref="NotSupportedException"></exception>
 /// <exception cref="ProxyTypeCreateException"></exception>
 /// <returns></returns>
 public static THttpApi Create <THttpApi>(IActionInterceptor actionInterceptor)
 {
     return(HttpApiFactory.Create <THttpApi>(actionInterceptor));
 }
 /// <summary>
 /// 创建IHttpApi的代理类的实例
 /// </summary>
 /// <param name="actionInterceptor">拦截器</param>
 /// <returns></returns>
 public static THttpApi Build(IActionInterceptor actionInterceptor)
 {
     return(proxyTypeCtor.Invoke(actionInterceptor, actionInvokers));
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 创建接口的实例
 /// </summary>
 /// <typeparam name="THttpApi"></typeparam>
 /// <param name="actionInterceptor">拦截器</param>
 /// <exception cref="NotSupportedException"></exception>
 /// <exception cref="ProxyTypeCreateException"></exception>
 /// <returns></returns>
 public static THttpApi Create <THttpApi>(IActionInterceptor actionInterceptor)
 {
     return(new HttpApiEmitActivator <THttpApi>().CreateInstance(actionInterceptor));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// 创建IHttpApi的代理类的实例
 /// </summary>
 /// <param name="interceptor">拦截器</param>
 /// <returns></returns>
 public object Build(IActionInterceptor interceptor)
 {
     return(this.proxyTypeCtor.Invoke(interceptor, this.interfaceType, this.apiMetods));
 }
Ejemplo n.º 8
0
        /// <summary>
        /// 创建IHttpApi的代理实例
        /// </summary>
        /// <param name="interfaceType">接口类型</param>
        /// <param name="interceptor">拦截器</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="NotSupportedException"></exception>
        /// <returns></returns>
        private static object Create(Type interfaceType, IActionInterceptor interceptor)
        {
            var builder = proxyBuilderCache.GetOrAdd(interfaceType, @interface => new HttpApiProxyBuilder(@interface));

            return(builder.Build(interceptor));
        }
Ejemplo n.º 9
0
 /// <summary>
 /// 创建THttpApi的代理实例
 /// </summary>
 /// <typeparam name="THttpApi"></typeparam>
 /// <param name="actionInterceptor">Action拦截器</param>
 /// <exception cref="NotSupportedException"></exception>
 /// <exception cref="ProxyTypeCreateException"></exception>
 /// <returns></returns>
 public static THttpApi Create <THttpApi>(IActionInterceptor actionInterceptor)
 {
     return(HttpApiProxyBuilder <THttpApi> .Build(actionInterceptor));
 }