Frage

Ich habe viele Beispiele/Tutorials gelesen (inkl. Ayende's Alexandria auf MSDN).

Aber nur etwas aktualisierte Versammlungen zu bekommen, hat sich als Hindernis für sich erwiesen. Nachdem die richtige Version von Castle.Windsor erhalten hat, kann es nicht den richtigen Abschnitt in der Datei app.config finden. Die Syntax sowohl im Rhino Service Bus als auch im CastleBootstrapper wurde ebenfalls verändert - und ich bin jetzt total verwirrt. Die "Dokumentation" zum Winterschlaf von Nashörnern hilft mir wirklich nicht, loszulegen.

Könnte mir jemand bitte ein funktionierendes Beispiel mit Rhino Service Bus mit Castle Windsor v. 3.0 (Beta) oder 2.5.3 helfen, weisen Sie mich auf etwas bereits online oder geben Sie mir nur schrittweise Hinweise auf das, was ich benötige, um zu bekommen, in Betrieb?

War es hilfreich?

Lösung

Nach dem Herunterladen der neuesten Rhino-ESB-Bits von Github (https://github.com/hibernating-rhinos/rhino-esb) und aufgebaut, ist es ziemlich einfach, loszulegen.

Ich habe eine ASP.NET-MVC-Anwendung, die mit einem Backend über Rhino-ESB kommuniziert.

Auf der ASP.NET MVC -Seite:

Auf 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));
}

Beachten Sie, dass YourCustomInstaller Muss implementieren IWindsorInstaller und Sie registrieren Ihre Controller mit dem Container in der InstallMethode:

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

Beachten Sie auch, dass die WindsorControllerFactory Die Erstellung von Controller -Erstellung intern in den Container innen:

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

Geben Sie die Konfiguration auf Ihrem Web.config an

<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>

In dieser Konfiguration geht davon aus, dass das Backend in Localhost: 31315 eine Warteschlange ausführt und der Client seine Warteschlange in Localhost: 31316 ausführt.

Auf der Backend -Seite: Angenommen, wir führen es als Konsolenanwendung aus,

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();

Beachte das YourBootstrapperKlasse implementiert CastleBootstrapper

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

in dem wir einen Verbraucher registrieren für OneOfYourMessages

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top