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
-~----------~----~----~----~------~----~------~--~---

Reply via email to