当前位置: 首页>>代码示例>>C#>>正文


C# IBuilder.BuildAll方法代码示例

本文整理汇总了C#中IBuilder.BuildAll方法的典型用法代码示例。如果您正苦于以下问题:C# IBuilder.BuildAll方法的具体用法?C# IBuilder.BuildAll怎么用?C# IBuilder.BuildAll使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IBuilder的用法示例。


在下文中一共展示了IBuilder.BuildAll方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: PipelineBuilder

 public PipelineBuilder(IBuilder builder)
 {
     pipelineOverrides = builder.BuildAll<IPipelineOverride>().ToList();
     CreateSendPhysicalMessageList();
     CreateReceivePhysicalMessageList();
     CreateReceiveLogicalMessageList();
     CreateHandlerInvocationList();
     CreateSendLogicalMessagesList();
     CreateSendLogicalMessageList();
 }
开发者ID:chrisbednarski,项目名称:NServiceBus,代码行数:10,代码来源:PipelineBuilder.cs

示例2: GetDispatcher


//.........这里部分代码省略.........
            var sagaTypesHandled = new List<Type>();

            foreach (var finder in GetFindersFor(message, builder))
            {
                bool sagaEntityIsPersistent = true;
                IContainSagaData sagaEntity = UseFinderToFindSaga(finder, message);
                Type sagaType;

                if (sagaEntity == null)
                {
                    sagaType = Features.Sagas.GetSagaTypeToStartIfMessageNotFoundByFinder(message, finder);
                    if (sagaType == null)
                        continue;

                    if (sagaTypesHandled.Contains(sagaType))
                        continue; // don't create the same saga type twice for the same message

                    sagaEntity = CreateNewSagaEntity(sagaType);

                    sagaEntityIsPersistent = false;
                }
                else
                {
                    if (entitiesHandled.Contains(sagaEntity))
                        continue; // don't call the same saga twice

                    sagaType = Features.Sagas.GetSagaTypeForSagaEntityType(sagaEntity.GetType());
                }

                if (messageHandlerType.IsAssignableFrom(sagaType))
                    yield return () =>
                                     {
                                         var saga = (ISaga)builder.Build(sagaType);

                                         saga.Entity = sagaEntity;

                                         try
                                         {
                                             SagaContext.Current = saga;

                                             if (IsTimeoutMessage(message))
                                             {
                                                 HandlerInvocationCache.InvokeTimeout(saga, message);
                                             }
                                             else
                                             {
                                                 HandlerInvocationCache.InvokeHandle(saga, message);
                                             }

                                             if (!saga.Completed)
                                             {
                                                 if (!sagaEntityIsPersistent)
                                                 {
                                                     Persister.Save(saga.Entity);
                                                 }
                                                 else
                                                 {
                                                     Persister.Update(saga.Entity);
                                                 }
                                             }
                                             else
                                             {
                                                 if (sagaEntityIsPersistent)
                                                 {
                                                     Persister.Complete(saga.Entity);
                                                 }

                                                 if (saga.Entity.Id != Guid.Empty)
                                                 {
                                                     NotifyTimeoutManagerThatSagaHasCompleted(saga);
                                                 }
                                             }

                                             LogIfSagaIsFinished(saga);

                                         }
                                         finally
                                         {
                                             SagaContext.Current = null;
                                         }

                                     };

                sagaTypesHandled.Add(sagaType);
                entitiesHandled.Add(sagaEntity);
            }

            if (entitiesHandled.Count == 0)
                yield return () =>
                                 {
                                     logger.InfoFormat("Could not find a saga for the message type {0} with id {1}. Going to invoke SagaNotFoundHandlers.", message.GetType().FullName, Bus.CurrentMessageContext.Id);
                                     foreach (var handler in builder.BuildAll<IHandleSagaNotFound>())
                                     {
                                         logger.DebugFormat("Invoking SagaNotFoundHandler: {0}",
                                                            handler.GetType().FullName);
                                         handler.Handle(message);
                                     }

                                 };
        }
开发者ID:afyles,项目名称:NServiceBus,代码行数:101,代码来源:SagaDispatcherFactory.cs

示例3: GetDispatcher

        /// <summary>
        /// Get Dispatcher
        /// </summary>
        /// <param name="messageHandlerType">Type of the message Handler</param>
        /// <param name="builder">Builder</param>
        /// <param name="message">Message</param>
        /// <returns>Saga Dispatcher</returns>
        public IEnumerable<Action> GetDispatcher(Type messageHandlerType, IBuilder builder, object message)
        {
            if (message.IsTimeoutMessage() && !message.TimeoutHasExpired())
            {
                yield return () => Bus.HandleCurrentMessageLater();
                yield break;
            }

            var entitiesHandled = new List<ISagaEntity>();
            var sagaTypesHandled = new List<Type>();

            foreach (var finder in GetFindersFor(message, builder))
            {
               bool sagaEntityIsPersistent = true;
                ISagaEntity sagaEntity = UseFinderToFindSaga(finder, message);
                Type sagaType;

                if (sagaEntity == null)
                {
                    sagaType = Configure.GetSagaTypeToStartIfMessageNotFoundByFinder(message, finder);
                    if (sagaType == null)
                        continue;

                    if (sagaTypesHandled.Contains(sagaType))
                        continue; // don't create the same saga type twice for the same message

                    Type sagaEntityType = Configure.GetSagaEntityTypeForSagaType(sagaType);
                    sagaEntity = Activator.CreateInstance(sagaEntityType) as ISagaEntity;

                    if (sagaEntity != null)
                    {
                        if (message is ISagaMessage)
                            sagaEntity.Id = (message as ISagaMessage).SagaId;
                        else
                            sagaEntity.Id = GuidCombGenerator.Generate();

                        sagaEntity.Originator = Bus.CurrentMessageContext.ReplyToAddress.ToString();
                        sagaEntity.OriginalMessageId = Bus.CurrentMessageContext.Id;

                        sagaEntityIsPersistent = false;
                    }
                }
                else
                {
                    if (entitiesHandled.Contains(sagaEntity))
                        continue; // don't call the same saga twice

                    sagaType = Configure.GetSagaTypeForSagaEntityType(sagaEntity.GetType());
                }

                if (messageHandlerType.IsAssignableFrom(sagaType))
                    yield return () =>
                                     {
                                         var saga = (ISaga)builder.Build(sagaType);

                                         saga.Entity = sagaEntity;

                                         HandlerInvocationCache.Invoke(saga, message);

                                         if (!saga.Completed)
                                         {
                                             if (!sagaEntityIsPersistent)
                                                 Persister.Save(saga.Entity);
                                             else
                                                 Persister.Update(saga.Entity);
                                         }
                                         else
                                         {
                                             if (sagaEntityIsPersistent)
                                                 Persister.Complete(saga.Entity);

                                             NotifyTimeoutManagerThatSagaHasCompleted(saga);
                                         }

                                         LogIfSagaIsFinished(saga);

                                     };
                sagaTypesHandled.Add(sagaType);
                entitiesHandled.Add(sagaEntity);
            }

            if (entitiesHandled.Count == 0)
                yield return () =>
                                 {
                                     logger.InfoFormat("Could not find a saga for the message type {0} with id {1}. Going to invoke SagaNotFoundHandlers.", message.GetType().FullName, Bus.CurrentMessageContext.Id);
                                     foreach (var handler in builder.BuildAll<IHandleSagaNotFound>())
                                     {
                                         logger.DebugFormat("Invoking SagaNotFoundHandler: {0}",
                                                            handler.GetType().FullName);
                                         handler.Handle(message);
                                     }

                                 };
//.........这里部分代码省略.........
开发者ID:ollnixon,项目名称:NServiceBus,代码行数:101,代码来源:SagaDispatcherFactory.cs


注:本文中的IBuilder.BuildAll方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。