带有注入原语的开放泛型
Open Generics with injected primitive
我如何用构造函数中注入的另一个开放泛型和基元注册一个开放泛型类型?
请参见下面的示例。
在这个示例中,Resolve 抛出 "Unable to resolve String as parameter " 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) { }
}
首先,RegisterInstance
被描述,使用UseInstance
。
其次,实际问题是您使用 serviceKey
注册实例,但没有使用此密钥进行注入。
因此,您要么删除 serviceKey
参数。
或者,指定注入端的密钥:
container.Register(typeof(IEntityUpdater<>), typeof(SqlEntityUpdater<>), Reuse.Singleton,
made: Parameters.Of.Type<string>(serviceKey: "connectionString"));
我如何用构造函数中注入的另一个开放泛型和基元注册一个开放泛型类型?
请参见下面的示例。
在这个示例中,Resolve 抛出 "Unable to resolve String as parameter " 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) { }
}
首先,RegisterInstance
被描述,使用UseInstance
。
其次,实际问题是您使用 serviceKey
注册实例,但没有使用此密钥进行注入。
因此,您要么删除 serviceKey
参数。
或者,指定注入端的密钥:
container.Register(typeof(IEntityUpdater<>), typeof(SqlEntityUpdater<>), Reuse.Singleton,
made: Parameters.Of.Type<string>(serviceKey: "connectionString"));