web-dev-qa-db-fra.com

Unity InjectionConstructor pour un constructeur multiparam ne remplaçant qu'un seul

J'ai une classe avec constructeur comme ceci:

public class Bar
{
    public Bar(IFoo foo, IFoo2 foo2, IFoo3 foo3, IFooN fooN, String text)
    {

    }
}

Je souhaite enregistrer Bar in Unity et fournir une valeur pour le texte:

unity.RegisterType<Bar, Bar>(new InjectionConstructor("123"));

Cependant, je ne peux pas le faire car il n'y a pas de constructeur de paramètres unique pour Bar.

Existe-t-il un moyen de fournir une valeur pour du texte sans spécifier tous les autres paramètres tels que ResolvedParameter<IFooN> etc.? Je ne l'aime vraiment pas, beaucoup de code, et chaque fois que je change de constructeur de Bar, je dois ajouter un autre ResolvedParameter.

40
Alex Burtsev

L'unité ne peut pas le faire en dehors de la boîte. Le mieux que vous puissiez faire est:

container.RegisterType<Bar>(
    new InjectionConstructor(
        typeof(IFoo), typeof(IFoo2), typeof(IFoo3), typeof(IFooN), "123"));

Ou vous pouvez utiliser la SmartConstructor fournie par le projet TecX . Cet article de blog décrit un peu de contexte.

L'inscription ressemblerait à ceci:

container.RegisterType<Bar>(new SmartConstructor("text", "123"));
42
Sebastian Weber
public void Register<TFrom>(params object[] constructorParams) where TFrom : class
        {
            _container.RegisterType<TFrom>(new InjectionConstructor(constructorParams));
        }
0
aecrch