asp.net mvc 4 - NServiceBus, Web API and OWIN -


i'm trying add nservicebus in web api hosted in owin. goal able make simple bus.send() inside controller. found plenty of blog posts, stackoverflow answers, etc. still no luck in accomplishing simple task.

i'm working on project based on these 2 posts (i did not start suspect ex collegue have taken somewhere on web) :

injecting nservicebus asp.net mvc 3 , web api adaptation : injecting nservicebus asp.net webapi

i have resolver adapter :

public class nservicebusresolveradapter : idependencyresolver {     private ibuilder builder;      public nservicebusresolveradapter(ibuilder builder)     {         this.builder = builder;     }      public object getservice(type servicetype)     {          if (typeof(ihttpcontroller).isassignablefrom(servicetype))         {             return builder.build(servicetype);         }          return null;       }      public ienumerable<object> getservices(type servicetype)     {         if (typeof(ihttpcontroller).isassignablefrom(servicetype))         {             return builder.buildall(servicetype);         }          return null;     }      public idependencyscope beginscope()     {         return this;     }      public void dispose()     {      } } 

and controller activator :

public class nservicebuscontrolleractivator : ihttpcontrolleractivator {     public ihttpcontroller create(httprequestmessage request, httpcontrollerdescriptor controllerdescriptor, type controllertype)     {         console.writeline("nservicebuscontrolleractivator create");         return dependencyresolver.current.getservice(controllertype) ihttpcontroller;     }  } 

all wrapped in extension method can use configure nservicebus :

public static class nservicebusconfigureextension {     public static configure forwebapi(this configure configure)     {         // register our http controller activator nsb         configure.configurer.registersingleton(typeof(ihttpcontrolleractivator), new nservicebuscontrolleractivator());          // find every http controller class can register         var controllers = configure.typestoscan         .where(t => typeof(ihttpcontroller).isassignablefrom(t));          // register each http controller class nservicebus container         foreach (type type in controllers)         {             configure.configurer.configurecomponent(type, dependencylifecycle.instancepercall);         }          // set webapi dependency resolver use our resolver         system.web.http.globalconfiguration.configuration.dependencyresolver =         new nservicebusresolveradapter(configure.builder);          return configure;     }  } 

so basically, in startup class, nservicebus gets configured via extension forwebapi() :

public class startup {     // code configures web api. startup class specified type     // parameter in webapp.start method.     public void configuration(iappbuilder appbuilder)     {         // configure web api self-host.          httpconfiguration config = new httpconfiguration();         config.routes.maphttproute(             name: "defaultapi",             routetemplate: "api/{controller}/{id}",             defaults: new { id = routeparameter.optional }         );          // inject nservicebus autofac          configure.serialization.xml();         configure.transactions.disable();          configure.with()              .autofacbuilder()              .forwebapi()              .defineendpointname("myserverwebapi")              .usetransport<msmq>()              .purgeonstartup(false)              .unicastbus()              .impersonatesender(false)              .createbus()              .start();           appbuilder.usewebapi(config);     } }  

then, based on written in blog posts david boike , karl nilsson (see previous links), shouldn't have else in controller add ibus property should automaticaly injected...

public class valuescontroller : apicontroller  {      // add bus property injected     public ibus bus { get; set; }      // api/values      public ienumerable<string> get()     {         return new string[] { string.format("welcome asp.net mvc! bus '{0}'.", bus.gettype().fullname) };     } } 

that's "theory" because in practice, bus property returns null. there out there me simple task ? maybe got wrong , there's better way autofac or di container ? feel free provide input should prove helpful. if have sample project on github nicer !

note : versions use :

  • owin : 2.0.2.0
  • system.web.mvc : 4.0.0.0

i decided go simple constructor injection autofac. ditched whole activator , adapter. added ioc container registration module init , configure everything. based on that sample

for seems work fine.


Comments

Popular posts from this blog

java - Plugin org.apache.maven.plugins:maven-install-plugin:2.4 or one of its dependencies could not be resolved -

Round ImageView Android -

How can I utilize Yahoo Weather API in android -