.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.list
1.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
Post a Comment