本文整理汇总了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();
}
示例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);
}
};
}
示例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);
}
};
//.........这里部分代码省略.........