私はこのようなコンストラクタを持つクラスを持っています:
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
Unityは、これをすぐに実行することはできません。できることは次のとおりです。
container.RegisterType<Bar>(
new InjectionConstructor(
typeof(IFoo), typeof(IFoo2), typeof(IFoo3), typeof(IFooN), "123"));
または、 TecX プロジェクトによって提供されるSmartConstructor
を使用できます。 このブログ投稿 いくつかの背景について説明しています。
登録は次のようになります。
container.RegisterType<Bar>(new SmartConstructor("text", "123"));
public void Register<TFrom>(params object[] constructorParams) where TFrom : class
{
_container.RegisterType<TFrom>(new InjectionConstructor(constructorParams));
}