Question

Je travaille avec StructureMap pour mes besoins IoC.

Pour rendre les choses agréablement testable, je passe des instances IContainer dans la mesure du possible, le plus souvent en tant que paramètres du constructeur. Par souci de commodité, je voudrais être en mesure de revenir à l'aide ObjectFactory pour un constructeur sans paramètre.

La façon la plus simple (je pensais) à faire serait de simplement obtenir la IContainer les enveloppements de classe ObjectFactory et passer que l'autre constructeur. Malheureusement, je ne trouve nulle part cette instance est exposé publiquement.

La question est:

Y at-il un moyen d'obtenir le IContainer au sein ObjectFactory donc je peux gérer comme simplement une instance fournie par l'utilisateur?

Sinon, est-il un moyen de dupliquer la configuration du ObjectFactory dans une nouvelle instance Container?

Exemple:

Je voudrais être en mesure de faire ce qui suit:

public class MyClass
{
    public MyClass()
    {
        Container = ... // The ObjectFactory container instance.
    }

    public MyClass(IContainer container)
    {
        Container = container;
    }

    public IContainer Container { get; private set; }
}
Était-ce utile?

La solution

ObjectFactory expose une propriété de conteneur qui vous donne la IContainer que vous recherchez.

Chaque fois que vous avez besoin d'un IContainer (qui ne devrait pas être souvent), vous pouvez toujours prendre une dépendance dans votre cteur de classe.

public class INeedAContainer
{
    private readonly IContainer _container;

    public INeedAContainer(IContainer container)
    {
        _container = container;
    }

    // do stuff
}

Je ne pense pas qu'il y ait un moyen de cloner un IContainer. Il existe une méthode container.GetNestedContainer () qui vous permet de garder vos transitoires de même pour la durée de vie du conteneur imbriqué. conteneurs emboîtés sont souvent utilisés dans un « utilisant » déclaration et sont très pratiques pour contrôler l'état des choses comme les limites des transactions de base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top