http://fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html
On Wed, May 13, 2009 at 6:23 AM, Ken Egozi <[email protected]> wrote: > Who is creating instances of your entities? ActiveRecord? NH? anything > else? > > you can setup NH so that it will use Windsor to create entities that came > from the DB, and it would wire the dependencies as usual. for new entities, > you'd ask them from Windsor, again recieving all needed services in the > creation process. > > > > > On Wed, May 13, 2009 at 7:04 AM, Tuna Toksoz <[email protected]> wrote: > >> Inject the container? >> >> .AddComponentInstance(typeof(IWindsorContainer),container); >> >> >> Tuna Toksöz >> Eternal sunshine of the open source mind. >> >> http://devlicio.us/blogs/tuna_toksoz >> http://tunatoksoz.com >> http://twitter.com/tehlike >> >> >> >> >> >> On Wed, May 13, 2009 at 7:00 AM, dnagir <[email protected]> wrote: >> >>> >>> Hi, >>> >>> In my model I want to use services injected from an application (Win, >>> Web, Service). >>> >>> A small example. Let's say I have User class with Username, Password >>> (private) and Set/CheckPassword method. >>> >>> The Set/CheckPassword methods should use IPasswordEncryption service. >>> So depending on the implementation it should store password as clear >>> text, hash etc. >>> >>> So I implement the method (on User class) similar to this: >>> public void SetPassword(string newPassword) { >>> var service = (IPasswordEncryption)ModelInjection.GetContainer() >>> .Resolve(typeof(IPasswordEncryption)); >>> this.Password = service.EncryptPassword(newPassword); >>> } >>> >>> But I'm not sure how to implement GetContainer method. Actually where >>> should I obtain IWindsorContainer instance from? >>> Static variable? ThreadStatic? >>> >>> I don't want my model to know where itself is going to be used. >>> Currently I implement ModelInjection.GetContainer() like this? But I >>> don't like how it smells and, on the other hand, I don't see a better >>> way. >>> >>> public static class ModelInjection { >>> [ThreadStatic] >>> private IWindsorContainer container; >>> >>> public static IWindsorContainer GetContainer() { >>> if (container == null) >>> throw new InvalidOperationException("The container is not >>> injected from consumer. Please do it."); >>> return container; >>> } >>> >>> public static SetContainer(IWindsorContainer newContainer) { >>> if (newContainer == null) >>> throw new ArgumentNullException("newContainer"); >>> if (container != null) >>> throw new NotSupportedException("The container has already been >>> injected. We do not want to support its replacement now."); >>> container = newContainer; >>> } >>> } >>> >>> Then in my application I can do ModelInjection.SetContainer (from >>> Application_BeginRequest in Web or anywhere in Win). >>> >>> Is this a good approach? Some suggestions please? >>> >>> Thanks, >>> Dmitriy. >>> >>> >>> >> >> >> > > > -- > Ken Egozi. > http://www.kenegozi.com/blog > http://www.delver.com > http://www.musicglue.com > http://www.castleproject.org > http://www.gotfriends.co.il > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
