Интерфейс nServiceBus IOC - PullRequest
       2

Интерфейс nServiceBus IOC

2 голосов
/ 14 марта 2012

Каждый образец, который я видел для nServiceBus, использовал конкретный класс для внедрения свойства IOC. Как мне зарегистрировать интерфейс? В приведенном ниже примере как зарегистрировать ISmtpClient для возврата SmtpClientProxy (созданный мной конкретный класс)?

public class EmailNotificationMessageHandler : IHandleMessages<EmailNotificationMessage>
{
        public ISmtpClient Smtp { get; set; }
        public void Handle(EmailNotificationMessage message)
        {
            //this.Smtp = new SmtpClient("localhost", 25);
            this.Smtp.SendAsync(message.FromAddress, message.ToAddress, message.Subject, message.Body, message.Id);
        }
    }

Моя конфигурация выглядит следующим образом, но я не вижу, как конкретный тип (я не хочу Singleton)

Configure.With().CastleWindsorBuilder().JsonSerializer();

Configure.Instance.Configurer.ConfigureComponent<ISmtpClient>(DependencyLifecycle.InstancePerCall);

Кроме того, есть ли способ получить доступ к реальному контейнеру (в моем случае это Виндзор) для выполнения любых других операций регистрации, которые мне нужны?

1 Ответ

2 голосов
/ 14 марта 2012

Вы можете передать nServiceBus используемый контейнер и ссылаться на него после:

 _container = new WindsorContainer();

Configure.With().CastleWindsorBuilder(_container).JsonSerializer();

 _container.AddComponent<ISmtpClient, CustomSmtpClient>();
...