如何在构造函数中注入另一个开放泛型和原语注册Open Generic类型?
请参阅下面的示例。
在此示例中,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) { }
}
答案 0 :(得分:1)
首先,RegisterInstance
已被停用,请使用UseInstance
。
其次,实际问题是您使用serviceKey
注册实例,并且无法使用此密钥进行注入。
因此,您要么删除serviceKey
参数。
或者,在注射侧指定键:
container.Register(typeof(IEntityUpdater<>), typeof(SqlEntityUpdater<>), Reuse.Singleton,
made: Parameters.Of.Type<string>(serviceKey: "connectionString"));