I may have found the problem
public class DefaultEngineContextFactory : IEngineContextFactory
{
public IEngineContext Create(IMonoRailContainer container, UrlInfo
urlInfo, HttpContext context, RouteMatch routeMatch)
{
IDictionary session = ResolveRequestSession(container,
urlInfo,
context);
IUrlBuilder urlBuilder = container.UrlBuilder;
ServerUtilityAdapter serverUtility = new
ServerUtilityAdapter
(context.Server);
string referrer = context.Request.Headers["Referer"];
return new DefaultEngineContext(container, urlInfo,
context,
serverUtility,
new RequestAdapter
(context.Request),
new ResponseAdapter(context.Response, urlInfo, urlBuilder,
serverUtility, routeMatch, referrer),
new TraceAdapter(context.Trace), session);
}
protected virtual IDictionary ResolveRequestSession
(IMonoRailContainer container, UrlInfo urlInfo, HttpContext context)
{
return null;
}
}
I'm going to implement ResolveRequestSession to return a session
adapter :) I'll report the results
On Feb 24, 10:33 am, Jason Meckley <[email protected]> wrote:
> ran a quick test. Session is not null when referenced in
> Global.Session_Start.
> however Session is null when referenced in UserStartUp.start();
>
> so this means that the engine context is resolved before session
> starts and injected into the startup service.
> and once the session is resolved. the context in my service doesn't
> relate back to the current http context, correct?
>
> any ideas around this :) Is there a context or application event I can
> tie into like OnSessionStart?
>
> On Feb 24, 10:02 am, "Ken Egozi" <[email protected]> wrote:
>
> > I use the FactorySupportFacility, in conjucntion with GenericFactory, and
> > register this:
> > var engineContextFactory = new GenericFactory<IEngineContext>(() =>
> > MonoRailHttpHandlerFactory.CurrentEngineContext);
> > var engineContextFactoryName = engineContextFactory.GetType().FullName;
> > container.Register(Component.For<GenericFactory<IEngineContext>>()
> > .Instance(engineContextFactory)
> > .Named(engineContextFactoryName),
> > Component.For<IEngineContext>()
> > .Attribute("factoryId").Eq(engineContextFactoryName)
> > .Attribute("factoryCreate").Eq("Create")
> > .LifeStyle.Transient);
>
> > A subdependency resolver fir IEngineContext is a very good idea.
>
> > As for your problem - I think it has nothing to do with MR ot windsor.
> > On app start, the Session object might simply not be available.
>
> > -----Original Message-----
> > From: [email protected]
>
> > [mailto:[email protected]] On Behalf Of Jason Meckley
> > Sent: Tuesday, February 24, 2009 4:53 PM
> > To: Castle Project Users
> > Subject: Register IEngineContext in Kernel
>
> > I have a simple service which loads users specific data into session on
> > session start.
> > if I place this code in the global.asax session_start member it loads fine.
> > abstracting this away from the http context. I created a UserStartUp service
> > which takes IEngineContext and IUserRepository as ctor args.
>
> > I then created a sub dependency resolver to resolve the context engine.
> > which is basically an adapter around
> > MonorailHttpHandlerFactory.CurrentEngineContext.
>
> > however when my application starts I get an null reference exception at
> > context.Session[key] = value;
>
> > the context is created, but session is null.
>
> > I call the UserStartUp service in
> > Global : HttpAppliation
> > {
> > public void Session_Start(...)
> > {
> > Container.Resolve<IUserStartUp>().start();
> > }
> > }
>
> > [Transient]
> > UserStartUp : IUserStartUp
> > {
> > //ctor args
>
> > public void start()
> > {
> > var id = context.CurrentUser.Identity.Name;
> > context.Session[key] = repository.get(id).name;
> > }
> > }
>
> > again, if the code is placed directly in the Session_Start member it works.
> > however if I move the code into a service and call the service from
> > Session_Start, session is null.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---