web-dev-qa-db-ja.com

単一のコンストラクタのみをオーバーライドするマルチパラメータコンストラクタ用のUnity InjectionConstructor

私はこのようなコンストラクタを持つクラスを持っています:

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

    }
}

UnityでBarを登録し、テキストの値を提供したい:

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

ただし、Barには単一のパラメーターコンストラクターがないため、これを行うことはできません。

他のすべてのパラメータをResolvedParameter<IFooN>などとして指定せずにテキストの値を提供する方法はありますか。私は本当にそれが好きではなく、コードがたくさんあります。 ResolvedParameter

42
Alex Burtsev

Unityは、これをすぐに実行することはできません。できることは次のとおりです。

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

または、 TecX プロジェクトによって提供されるSmartConstructorを使用できます。 このブログ投稿 いくつかの背景について説明しています。

登録は次のようになります。

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