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.

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