Вопрос

Я прочитал много примеров/учебных пособий (в том числе Александрия Айенде на MSDN).

Но просто получить несколько обновленных собраний оказалось препятствием само по себе. После получения правильной версии Castle.windsor - он не может найти правильный раздел в файле app.config. Синтаксис в автобусе Rhino Service и CastlebootStrapper также изменился - и теперь я полностью запутался. «Документация» о спящих носорогах на самом деле не помогает мне начать работу.

Может ли кто-нибудь, пожалуйста, помочь мне в рабочем образе с автобусом Rhino Service с либо Castle Windsor v. 3.0 (бета), либо 2.5.3, укажите мне на что-то уже в Интернете или просто дал мне пошаговые указатели о том, что мне нужно, в беге?

Это было полезно?

Решение

После загрузки новейших битов Rhino-ESB от github (https://github.com/hibernating-rhinos/rhino-esb) и создание его, довольно просто начать работу.

У меня есть приложение ASP.NET MVC, которое связано с бэкэнд через Rhino-ESB.

На стороне ASP.NET MVC:

На Global.asax.cs:

private IWindsorContainer _container;

protected void Application_Start()
{
    _container = new WindsorContainer();
    new RhinoServiceBusConfiguration().UseCastleWindsor(_container).Configure();
    _container.Install(new YourCustomInstaller());
    //Don't forget to start the bus
    _container.Resolve<IStartableServiceBus>().Start();
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(_container));
}

Обратите внимание, что YourCustomInstaller должен реализовать IWindsorInstaller и вы зарегистрируете свои контроллеры с помощью контейнера в InstallМетод:

public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
    container.Register(Component
       .For<HomeController>().LifeStyle.PerWebRequest.ImplementedBy<HomeController>());

Также обратите внимание, что WindsorControllerFactory Внутренне делегаты контроллера создание в контейнер:

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
            return null;
        return (IController)this.container.Resolve(controllerType);
    }

И последнее, но не менее важное, предоставьте конфигурацию в вашем web.config

<configSections>
    <section name="rhino.esb" type="Rhino.ServiceBus.Config.BusConfigurationSection, Rhino.ServiceBus"/>
  </configSections>
  <rhino.esb>
    <bus threadCount="1"
         numberOfRetries="5"
         endpoint="rhino.queues://localhost:31316/Client"
         queueIsolationLevel="ReadCommitted"
         name="Client"/>
    <messages>
      <add name="YourMessagesNamespace"endpoint="rhino.queues://localhost:31315/Backend"/>
    </messages>
  </rhino.esb>

Эта конфигурация предполагает, что бэкэнд выполняет очередь в Localhost: 31315, а клиент запускает свою очередь на Localhost: 31316.

На бэкэнд -стороне: при условии, что мы запускаем его в качестве приложения консоли,

static void Main(string[] args)
        {
            IWindsorContainer container;
            container = new WindsorContainer();
            new RhinoServiceBusConfiguration()
                .UseCastleWindsor(container)
                .Configure();
            var host = new RemoteAppDomainHost(typeof(YourBootstrapper));
            host.Start();

            Console.WriteLine("Starting to process messages");
            Console.ReadLine();

Заметь YourBootstrapperКлассовые орудия CastleBootstrapper

public class YourBootstrapper: Rhino.ServiceBus.Castle.CastleBootStrapper
    {
        protected override void ConfigureContainer()
        {
            Container.Register(Component.For<OneOfYourMessages>());
        }
    }

в котором мы регистрируем потребителя для OneOfYourMessages

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top