0
オープンジェネリックのタイプを、別のオープンジェネリックとプリミティブをコンストラクタに注入して登録するにはどうしたらいいですか?
以下の例を参照してください。
この例では、Resolveが "Stringをパラメータとして解決できません"というconnectionString "例外をスローしています。 (あなたはライブコードhereを確認することができます)注入されたプリミティブでジェネリックを開く
using System;
using DryIoc;
public class Program
{
public static void Main()
{
var container = new Container();
container.RegisterInstance("some_connection_string", serviceKey: "connectionString");
container.Register(typeof(Configuration<>), Reuse.Singleton);
container.Register(typeof (IEntityUpdater<>), typeof (SqlEntityUpdater<>), Reuse.Singleton);
var p = container.Resolve<IEntityUpdater<EventArgs>>();
Console.WriteLine(p);
}
}
public class Configuration<T> where T : class { }
internal interface IEntityUpdater<in T> where T : class
{
void Update(T entity);
}
internal class SqlEntityUpdater<T> : IEntityUpdater<T> where T : class
{
public SqlEntityUpdater(Configuration<T> configuration, string connectionString)
{
}
public void Update(T entity) { }
}
感謝。申し訳ありませんが、あなたの答えが問題の解決にどのように役立つのか分かりません。私の例で分かるように、 'SqlEntityUpdater'はコンストラクタで2つのサービスを必要とします。私は 'serviceKey'の問題を認識していますが、' made: '引数に複数の' Parameters.Of.Type <> 'をどのように使用できますか? – DMVC
私は悪いことはしません。私はすべての引数を指定する必要があると仮定していました。しかし、DryIocはそれらのいくつかを理解するのにちょっとした助けが必要なようです。もう一度ありがとう。 – DMVC