NServiceBus:没有泛型主机的自定义ISubscriptionStorage实现

时间:2010-11-16 22:22:56

标签: nservicebus

当我使用通用主机以外的其他东西时,我无法使用我的自定义ISubscriptionStorage实现。我不确定为什么。我得到一个例外“无法在此端点上发布 - 没有配置订阅存储。在'NServiceBus.Configure.With()'之后添加'MsmqSubscriptionStorage()'或'DbSubscriptionStorage()'。”

只有我不想使用这些选项,因为我想使用自定义选项。

这就是我失败的原因:

public class Program
{
    static void Main()
    {
        var bus = Configure.With()
            .CustomConfigurationSource(new UserConfigurationSource()
                .Register(() => new MsmqTransportConfig())
                .Register(() => new UnicastBusConfig()))
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
            .IsTransactional(true)
            .UnicastBus()
            .CreateBus()
            .Start();

        Configure.Instance.Configurer.ConfigureComponent<StreamSubscriptionStorage>(ComponentCallModelEnum.Singleton);

        Console.WriteLine("This will publish IEvent and EventMessage alternately.");
        Console.WriteLine("Press 'Enter' to publish a message.To exit, Ctrl + C");

        bool publishIEvent = true;

        while (Console.ReadLine() != null)
        {
            var eventMessage = publishIEvent ? bus.CreateInstance<IEvent>() : new EventMessage();

            eventMessage.EventId = Guid.NewGuid();
            eventMessage.Time = DateTime.Now.Second > 30 ? (DateTime?)DateTime.Now : null;
            eventMessage.Duration = TimeSpan.FromSeconds(99999D);

            bus.Publish(eventMessage);

            Console.WriteLine("Published event.");

            publishIEvent = !publishIEvent;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您需要在启动总线之前配置自定义订阅存储。你可以通过在流畅的初始化中包含.RunCustomAction(这里的代码)来做到这一点。