L'Injection de dépendance avec les paramètres du constructeur qui ne sont pas des interfaces

Je suis encore un débutant à DI, et j'essaie de comprendre si je suis de penser à des choses de la mauvaise façon. Je suis en train de travailler sur un jouet problème lorsque je veux représenter un dé objet qui a une dépendance sur un IRandomProvider. L'interface est simple:

public interface IRandomProvider 
{
   int GetRandom(int lower, int upper);
}

Je veux avoir un dé constructeur qui ressemble à ceci:

Die(int numSides, IRandomProvider provider)

Je suis en train d'utiliser un statique DIFactory qui a une méthode comme ceci:

    public static T Resolve<T>()
    {
        if (kernel == null)
        {
            CreateKernel();
        }
        return kernel.Get<T>();
    }

Où CreateKernel simplement se lie à une mise en œuvre spécifique de IRandomProvider.

Je veux être en mesure d'appeler cette avec:

DIFactory.Resolve<Die>(20);

Je ne peux pas faire ce travail sans en faire une version spéciale de "Résoudre" ce qui peut me permettre de me traiter avec ConstructorArgs. Qui semble rendre les choses trop complexes, et m'obligerait à modifier DIFactory pour tous les autres cas, ainsi que de lier un nom spécifique pour le paramètre de constructeur.

Si je refactoriser le dé de la classe de ne pas utiliser l'int du constructeur, tout fonctionne bien. Mais maintenant que quelqu'un n'oubliez pas d'initialiser le numSides paramètre, ce qui semble une mauvaise idée, puisque c'est une exigence pour la classe.

Je suppose que c'est un mauvais modèle mental pour DI. Quelqu'un peut-il m'éclairer?

btw: N'êtes-vous pas sens Dice et pas Die? =)
Non, Mourir est singulier. dés est au pluriel. Je vais être mise en œuvre d'un Dé de la classe qui détient un certain nombre de filières, pouvez vérifier pour les doubles, etc.
J'ai parfois déplacer le paramètre à partir d'un constructeur à un membre de la fonction: int Rouleau(int numSides)

OriginalL'auteur Alex Kilpatrick | 2012-08-27