Hello,

Jason, thanks for taking the time to answer all those questions, I have started 
using nhibernate a few months ago and found this thread quite useful as well!

Thanks again,
Seif

On Fri, Jan 29, 2010 at 2: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.com and www.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 controllerContext, 
ActionDescriptor
> > > > > > > actionDescriptor, IDictionary`2 parameters)
> > > > > > >        vid
> > > > > > > 
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMeth odWithFilters>b__7
> > > > > > > ()
> > > > > > >        vid
> > > > > > > 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
> > > > > > > (IActionFilter filter, 
ActionExecutingContext preContext, Func`1
> > > > > > > continuation)
> > > > > > >        vid
> > > > > > > 
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClass 
c.<InvokeActionMethodWithFilters>b__9
> > > > > > > ()
> > > > > > >        vid
> > > > > > > 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters
> > > > > > > (ControllerContext controllerContext, 
IList`1 filters,
> > > > > > > ActionDescriptor actionDescriptor, 
IDictionary`2 parameters)
> > > > > > >        vid 
System.Web.Mvc.ControllerActionInvoker.InvokeAction
> > > > > > > (ControllerContext controllerContext, String 
actionName)
> > > > > > >        vid 
System.Web.Mvc.Controller.ExecuteCore()
> > > > > > >        vid 
System.Web.Mvc.ControllerBase.Execute(RequestContext
> > > > > > > requestContext)
> > > > > > >        vid
> > > > > > > 
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute
> > > > > > > (RequestContext requestContext)
> > > > > > >        vid 
System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase
> > > > > > > httpContext)
> > > > > > >        vid 
System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext
> > > > > > > httpContext)
> > > > > > >        vid
> > > > > > > 
System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest
> > > > > > > (HttpContext httpContext)
> > > > > > >        vid 
System.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest
> > > > > > > (IHttpHandler httpHandler, HttpContextBase 
httpContext)
> > > > > > >        vid 
System.Web.Routing.UrlRoutingHandler.ProcessRequest
> > > > > > > (HttpContextBase httpContext)
> > > > > > >        vid 
System.Web.Routing.UrlRoutingHandler.ProcessRequest
> > > > > > > (HttpContext httpContext)
> > > > > > >        vid
> > > > > > > 
System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest
> > > > > > > (HttpContext context)
> > > > > > >        vid 
WebMonitorUpdate._Default.Page_Load(Object sender,
> > > > > > > EventArgs e) i 
C:\Projects\WebMonitorUpdate\WebMonitorUpdate
>
> ...
>
> 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.


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to