web-dev-qa-db-ger.com

Unity InjectionConstructor für Multiparam-Konstruktor, der nur einen einzelnen überschreibt

Ich habe eine Klasse mit Konstruktor wie folgt:

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

    }
}

Ich möchte Bar in Unity registrieren und einen Wert für Text angeben:

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

Ich kann dies jedoch nicht tun, da es keinen Einzelparameter-Konstruktor für Bar gibt.

Gibt es eine Möglichkeit, einen Wert für Text anzugeben, ohne alle anderen Parameter als ResolvedParameter<IFooN> usw. anzugeben. Ich mag es wirklich nicht, viel Code, und jedes Mal, wenn ich einen Konstruktor von Bar ändere, muss ich einen weiteren ResolvedParameter hinzufügen

40
Alex Burtsev

Unity kann das nicht ohne weiteres tun. Das Beste, was Sie tun können, ist:

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

Oder Sie können die SmartConstructor verwenden, die vom TecX - Projekt bereitgestellt wird. Dieser Blogbeitrag beschreibt einige Hintergründe.

Die Registrierung würde so aussehen:

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