.net - NServiceBus 4 and custom SagaPersister -


after migrating nservicebus 4 (from 3.3.7 4.0.5) trying run custom saga persister. registering in container (one use in whole web application), during application startup exception:

[componentresolutionexception: looks trying resolve component depends (directly or indirectly) on component lifestyle perwebrequest. executed code not in web request scope.analyze dependencies , change lifestyles (to signletons) or dependencies.] customapp.mapping.webrequestfallingbacktocallcontextscopeaccessor.getscope(creationcontext context) in c:\tfs\main\src\appname2\customapp\customapp.mapping\webrequestfallingbacktocallcontextscopeaccessor.cs:40 castle.microkernel.lifestyle.scopedlifestylemanager.getscope(creationcontext context) +33 castle.microkernel.lifestyle.scopedlifestylemanager.resolve(creationcontext context, ireleasepolicy releasepolicy) +84 castle.microkernel.handlers.defaulthandler.resolvecore(creationcontext context, boolean requiresdecommission, boolean instancerequired, burden& burden) +282 castle.microkernel.handlers.defaulthandler.resolve(creationcontext context, boolean instancerequired) +35 castle.microkernel.resolvers.defaultdependencyresolver.resolvefromkernelbytype(creationcontext context, componentmodel model, dependencymodel dependency) +170 castle.microkernel.resolvers.defaultdependencyresolver.resolve(creationcontext context, isubdependencyresolver contexthandlerresolver, componentmodel model, dependencymodel dependency) +38 castle.microkernel.componentactivator.defaultcomponentactivator.createconstructorarguments(constructorcandidate constructor, creationcontext context) +430 castle.microkernel.componentactivator.defaultcomponentactivator.instantiate(creationcontext context) +52 castle.microkernel.componentactivator.defaultcomponentactivator.internalcreate(creationcontext context) +30 castle.microkernel.componentactivator.abstractcomponentactivator.create(creationcontext context, burden burden) +27 castle.microkernel.lifestyle.abstractlifestylemanager.createinstance(creationcontext context, boolean trackedexternally) +57 castle.microkernel.lifestyle.abstractlifestylemanager.resolve(creationcontext context, ireleasepolicy releasepolicy) +29 castle.microkernel.handlers.defaulthandler.resolvecore(creationcontext context, boolean requiresdecommission, boolean instancerequired, burden& burden) +282 castle.microkernel.handlers.defaulthandler.resolve(creationcontext context, boolean instancerequired) +35 castle.microkernel.defaultkernel.resolvecomponent(ihandler handler, type service, idictionary additionalarguments, ireleasepolicy policy) +154 castle.microkernel.defaultkernel.castle.microkernel.ikernelinternal.resolve(type service, idictionary arguments, ireleasepolicy policy) +74 nservicebus.config.displayinfrastructureservicesstatus.run() in c:\buildagent\work\d4de8921a0aabf04\src\nservicebus.core\config\infrastructureservices.cs:163 system.collections.generic.list1.foreach(action1 action) +14013700 nservicebus.configure.initialize() in c:\buildagent\work\d4de8921a0aabf04\src\nservicebus.core\configure.cs:374 nservicebus.configure.createbus() in c:\buildagent\work\d4de8921a0aabf04\src\nservicebus.core\configure.cs:307 customapp.web.initialization.businstaller.install(iwindsorcontainer container, iconfigurationstore store) in c:\tfs\main\src\appname2\customapp\customapp.web\initialization\businstaller.cs:56 castle.windsor.windsorcontainer.install(iwindsorinstaller[] installers, defaultcomponentinstaller scope) +216 castle.windsor.windsorcontainer.install(iwindsorinstaller[] installers) +124 customapp.web.windsorcontainerprovider.getinitializedcontainer() in c:\tfs\main\src\appname2\customapp\customapp.web\windsorcontainerprovider.cs:87 customapp.web.mvcapplication.getinitializedcontainer() in c:\tfs\main\src\appname2\customapp\customapp.web\global.asax.cs:265 customapp.web.mvcapplication.application_start() in c:\tfs\main\src\appname2\customapp\customapp.web\global.asax.cs:139 customapp.administration.web.global.application_start() in c:\tfs\main\src\appname2\customapp\administration\customapp.administration.web\global.asax.cs:11

any ideas how resolve issue? same code base worked smoothly nservicebus 3.3.7

edit: how init nsb:

 configure.serialization.xml();  configure.features.enable<secondlevelretries>();   configure.features.enable<timeoutmanager>();  configure.features.enable<sagas>();   var conf = configure.with(assemblies)      .customconfigurationsource(new busconfigsource(assemblies))      .defineendpointname(configurationmanager.appsettings["endpointname"])      .castlewindsorbuilder(container)      .usetransport<msmq>()      .useinmemorytimeoutpersister()      .purgeonstartup(false)      .filesharedatabus(webconfigurationmanager.appsettings["nservicebusfileshare"])      .unicastbus()      .loadmessagehandlers()      .msmqsubscriptionstorage();  conf.configurer.configurecomponent<customsagapersister>(dependencylifecycle.instancepercall);  conf.createbus().start(() => configure.instance.forinstallationon<windows>().install()); 

i tried approach manualy adding customsagapersiter container , without calling

conf.configurer.configurecomponent<customsagapersister>(dependencylifecycle.instancepercall); 

but result same.

after week of investigation, seems container initialization process in application bit strange. container not initialized during nsb startup, resolve of dependencies not possible, causes mentioned exception.

i workaround problem making customsagapersister's dependencies optional (property injection), when customsagapersister resolved displayinfrastructureservicesstatus app not crash (dependencies not injected, since checking registered , not using it, ok).

another workaround removing displayinfrastructureservicesstatus nsb , custom compiling it.


Comments

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

c++ - Correct method for redrawing a layered window -

java.util.scanner - How to read and add only numbers to array from a text file -