Thanks Jason

I have had an overridden controller factory almost like yours here. It
is solved now.

The only thing that I do not use is Filter for managing transaction.
The reason is I use ASP .NET MVC Controller which I cannot use Filter
in Monorail (due to confliction).

Due to lack of time I am satisfied to use:

using (ITransaction tx = WindsorContainerAccessorUtil.ObtainContainer
().Resolve<ISessionFactory>().GetCurrentSession().BeginTransaction())
{
...
}

Thanks once again
/Sheri

On Jan 29, 3:03 am, Jason Meckley <[email protected]> wrote:
> I don't have anything concrete handy, but here is the concept.
> MVC has an interface, well call it IControllerFactory.  that has a
> single method.
> interface IControllerFactory
> {
>     IController CreateController(Uri uri)}
>
> the framework comes with a default implementation. we'll call it
> class DefaultControllerFactory : IControllerFactory
> {
>      public IController CreateController(Uri uri)
>      {
>            ...
>      }}
>
> you can ovrride this by creating your own implementation
> class WindsorControllerFactory : IControllerFactory
> {
>      IKernel kernel;
>      WindsorControllerFactory(IKernel kernel)
>      {
>         this.kernel = kernel;
>      }
>      public IController CreateController(Uri uri)
>      {
>            var key = parse IContoller key from uri.
>            return kernel.Resolve<IController>(key);
>      }}
>
> Now that we have this new implementation of the controller factory we
> need to tell MVC to use this one instead of the default.
> class Global: HttpApplication
> {
>        private static IWindsorContainer container;
>        public void Application_Start(object sender, EventArgs e)
>        {
>              container = new WindsorContainer
> ().AddComponent<WindsorControllerFactory>();
>              SomeMvcConfigurationObject.ControllerFactoryToUse =
> container.Resolve<WindsorControllerFactory>();
>        }}
>
> and now your controllers are resolved from your factory instead of the
> default. MvcContrib (http://www.codeplex.com/MVCContrib) does most of
> this work for you. if you reference mvccontrib in your project you can
> use this to enhance the default MVC features.
>
> "How long does it take to be a capable developer like you?! "
> I have been a developer for ~9 years. I didn't have a clue what i was
> doing for the first 5. the turning point for me was *nothin' but .net*
> (http://www.jpboodhoo.com/training.oo). Up until then I had no idea
> what OOP really was. after than projects like Castle and Nhibernate
> made more sense and i could understand what was happening when I
> looked at the code.www.ayende.com,www.codebetter.comandwww.lostechies.com
> also helped me progress.
>
> On Jan 28, 4:24 pm, Sheri <[email protected]> wrote:
>
>
>
> > Hi Jason
> > Thanks again
> > I really appreciate all your help.
> > I have solved my problem but it is not the real one! maybe  I need
> > more knowledge to understand your comments.
> > Your comments are advance comment so I need read them more than once
> > to understand. (typically junior developer!)
>
> > If you have some example for your description below I am very thankful
> > otherwise I am still very thankful for all that time you spent to help
> > me.
>
> > Best Regards
> > Sheri
> > P.S. How long does it take to be a capable developer like you?!
>
> > On 28 Jan, 15:25, Jason Meckley <[email protected]> wrote:
>
> > > Ah, ok. I'm not familar with OoTB, but the MS MVC default ctor issue I
> > > do know about.  The default controller resolution method for MS MVC is
> > > using a default constructor. But you can override this by implementing
> > > your own ControllerFactory. There may also be other factory interfaces
> > > you can replace to resolve Filters, membership, etc. If so you would
> > > want to override these as well. where the the Factory implementation
> > > would resolve the objects from the kernel.
>
> > > I use Monorail which ties in very nicely with Windsor, so i take for
> > > granted that Filters/Controller/etc are resolved from the Kernel.
> > > There is a project called MvcContrib which is primarly maintained by
> > > HeadSpring. If you are not familar with this project I would highly
> > > recommend it. It picks up with MS MVC stops.
>
> > > If there isn't a way to change how the membership provider is created.
> > > you will need to find a hook to inject the dependencies via
> > > properties. it would look something like
>
> > > var provider = GetProviderByDefaultCtor.
> > > provider.Dependency = kernel.Resolve<Dependency>();
> > > //then return or use the provider.
>
> > > Not as clean, but it gets the dependencies into the provider.
>
> > > On Jan 28, 7:48 am, Sheri <[email protected]> wrote:
>
> > > > Hope I do not make you angry with my daily questions!!
>
> > > > I have followed all advices. Everything works fine and SessionScope
> > > > seems to be worked fine. but I still have "Session Closed!" error. I
> > > > get this error exactly when the logined page will appear after login!
>
> > > > The reason that I got through debug is "Membership Provider". this
> > > > OoTB approach need default constructor, and DI needs another
> > > > constructor for DI objects, the problem begins here. Membership
> > > > Provider initialized (default ctor) by ASP .NET MVC oOTB membership
> > > > approach and when the user will log in Membership provider initializes
> > > > via DI (ctor with DI objects) again that I guess the older session is
> > > > no more active.
>
> > > > tired of these conflicts and lack of my knowledge to solve it :-S
>
> > > > Any idea?
>
> > > > Thanks once again and again
> > > > /Sheri
>
> > > > On 27 Jan, 16:20, Jason Meckley <[email protected]> wrote:
>
> > > > > you lost me :) i think I get it, but want to be sure.
> > > > > 1. you are subclassing asp.net MembershipProvider
> > > > > 2. your implementation utilizes ISession
> > > > > 3. your implementation isn't registered in the container and therefore
> > > > > cannot be resolved automatically
>
> > > > > I haven't used the MembershipProvider explicitly. The apps I create
> > > > > are intranet apps on a Windows Domain. We utlize windows
> > > > > authentication, so I'm haven't had to explicitly control the login
> > > > > process.
>
> > > > > can you post the relevant code for the provider (and associated
> > > > > objects)? We should be able to get this to work.
>
> > > > > On Jan 27, 9:00 am, Sheri <[email protected]> wrote:
>
> > > > > > Jason, thanks again for your quick answer!
>
> > > > > > All of component who injects session are transient.
> > > > > > The only thing that I can guess is "MembershipProvider" in ASP .NET
> > > > > > MVC. I cannot register it as a component. and since I user one of my
> > > > > > services in my costumized provider I should register this one as a
> > > > > > transient component too but I cannot do.
>
> > > > > > Is it true? what can I use instead of OoTB "Membership Provider" in
> > > > > > ASP .NET MVC 1.0?
>
> > > > > > /Sheri
>
> > > > > > On 26 Jan, 22:32, Jason Meckley <[email protected]> wrote:> if 
> > > > > > you are injecting the session into a service, the service must be
> > > > > > > Transient, also with objects that utilize these service must be
> > > > > > > transient. here are some examples
>
> > > > > > > controller > dao > session. all must be transient
> > > > > > > controller > service
> > > > > > >               > dao > session. controller and dao must be 
> > > > > > > transient,
> > > > > > > service can be a singleton, if necessary.
>
> > > > > > > by default component lifestyles are "undefined" which defaults to
> > > > > > > singletons.
>
> > > > > > > On Jan 26, 3:54 pm, Sheri <[email protected]> wrote:
>
> > > > > > > > ______________________
> > > > > > > > By the way the error message is (sorry for swedish language in 
> > > > > > > > the
> > > > > > > > message):
>
> > > > > > > > System.ObjectDisposedException was unhandled by user code
> > > > > > > >   Message="Session is closed!\r\nObjektnamn: ISession."
> > > > > > > >   Source="NHibernate"
> > > > > > > >   ObjectName="ISession"
> > > > > > > >   StackTrace:
> > > > > > > >        vid NHibernate.Impl.AbstractSessionImpl.ErrorIfClosed()
> > > > > > > >        vid
> > > > > > > > NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus()
> > > > > > > >        vid NHibernate.Impl.SessionImpl.CreateCriteria(Type
> > > > > > > > persistentClass, String alias)
> > > > > > > >        vid
> > > > > > > > WebMonitorUpdate.Models.NHDataAccessObjects.OnlineSystemDAO.findByUsername
> > > > > > > > (String username) i 
> > > > > > > > C:\Projects\WebMonitorUpdate\WebMonitorUpdate
> > > > > > > > \Models\NHDataAccessObjects\OnlineSystemDAO.cs:rad 55
> > > > > > > >        vid
> > > > > > > > WebMonitorUpdate.SQLServerServices.OnlineSystemService.getCustomerInfoByNam
> > > > > > > >  e
> > > > > > > > (String username) i 
> > > > > > > > C:\Projects\WebMonitorUpdate\WebMonitorUpdate
> > > > > > > > \SQLServerServices\OnlineSystemService.cs:rad 33
> > > > > > > >        vid
> > > > > > > > WebMonitorUpdate.MembershipServicesImpl.SQLServerMembershipProvider.Validat
> > > > > > > >  eUser
> > > > > > > > (String usernameAndSystemId, String password) i C:\Projects
> > > > > > > > \WebMonitorUpdate\WebMonitorUpdate\MembershipServicesImpl
> > > > > > > > \SQLServerMembershipProvider.cs:rad 139
> > > > > > > >        vid
> > > > > > > > WebMonitorUpdate.MembershipServicesImpl.AccountMembershipService.ValidateUs
> > > > > > > >  er
> > > > > > > > (String systemId, String userName, String password) i 
> > > > > > > > C:\Projects
> > > > > > > > \WebMonitorUpdate\WebMonitorUpdate\MembershipServicesImpl
> > > > > > > > \AccountMembershipService.cs:rad 32
> > > > > > > >        vid 
> > > > > > > > WebMonitorUpdate.Validators.AccountValidators.ValidateLogOn
> > > > > > > > (String systemId, String userName, String password, 
> > > > > > > > IMembershipService
> > > > > > > > membershipService, ModelStateDictionary modelState) i 
> > > > > > > > C:\Projects
> > > > > > > > \WebMonitorUpdate\WebMonitorUpdate\Validators\AccountValidators.cs:rad
> > > > > > > > 50
> > > > > > > >        vid 
> > > > > > > > WebMonitorUpdate.Controllers.AccountController.LogOn(String
> > > > > > > > systemId, String userName, String password, Boolean rememberMe, 
> > > > > > > > String
> > > > > > > > returnUrl) i 
> > > > > > > > C:\Projects\WebMonitorUpdate\WebMonitorUpdate\Controllers
> > > > > > > > \AccountController.cs:rad 70
> > > > > > > >        vid lambda_method(ExecutionScope , ControllerBase , 
> > > > > > > > Object[] )
> > > > > > > >        vid System.Web.Mvc.ActionMethodDispatcher.Execute
> > > > > > > > (ControllerBase controller, Object[] parameters)
> > > > > > > >        vid System.Web.Mvc.ReflectedActionDescriptor.Execute
> > > > > > > > (ControllerContext controllerContext, IDictionary`2 parameters)
> > > > > > > >        vid 
> > > > > > > > System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod
> > > > > > > > (ControllerContext...
>
> read more »

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en.

Reply via email to