I've designed my game entities using a common pattern of separating the entity from its components.  In my case, I've used the Strategy pattern to give each of my entities an IDrawable component.

I construct my entities using a factory, which constructs the entity and adds an appropriate drawable, e.g.:

    public static PlayerEntity CreatePlayerEntity(...)
    {
       PlayerEntity playerEntity = new PlayerEntity(...);
       SpriteDrawable spriteDrawable = new SpriteDrawable(...);
       playerEntity.Drawable = spriteDrawable;
    
       ...
    
       return playerEntity;
    }

Now here's the question: If I later want to update the player drawable in some way (e.g. modify the sprite, change the animation, etc.), how and where should I do this?

My first thought is to have C# events that the PlayerEntity publishes and the Drawable subscribes to, but this gets tricky from a purist standpoint, because it's hard to do this without the Drawable requiring a reference to a PlayerEntity.  My current hacky solution is to subscribe to these events from within the CreatePlayerEntity() method itself, using anonymous delegates, which can take advantage of the fact that you've still got a reference to the concrete IDrawable implementation.  It just doesn't seem right for the factory to have this responsibility, though:

    public static PlayerEntity CreatePlayerEntity(...)
    {
       PlayerEntity playerEntity = new PlayerEntity(...);
       SpriteDrawable spriteDrawable = new SpriteDrawable(...);
       playerEntity.Drawable = spriteDrawable;
    
      playerEntity.SomeEvent += new EventHandler((sender, e) => { spriteDrawable.Texture = blah; });

       ...
    
       return playerEntity;
    }

What is a better, approved way to accomplish this communication between concrete implementations?