在Simple Injector中注册具有构造函数参数的泛型类型

时间:2016-03-21 00:58:24

标签: c# generics dependency-injection simple-injector

如何在Simple Injector中注册具有参数的泛型类型 (最新的SimpleInjector版本v3);

我的界面是;

public interface IDbHelper<T> where T : class
{

    void SetInformation(string title, string description);
}

我的班级实施;

public class JsonDbWrapper<T> : IDbHelper<T> where T : class
{
    private readonly JsonDb<T> _jsonFile;

    public JsonDbWrapper(string path, string filename, Encoding encoding)
    {
        _jsonFile = JsonDb<T>.GetInstance(path, filename, encoding);
    }


    public void SetInformation(string title, string description) { ... }
}

我试过跟随,当然是它抛出异常:

container.Register(typeof(IDbHelper<>), typeof(JsonDbWrapper<>));

例外是;

  

错误:System.ArgumentException:类型JsonDbWrapper<T>的构造函数包含String类型的参数'path',它不能用于构造函数注入。

我可以创建一个设置路径,文件名和编码的方法。但我想在构造函数中使用它们。我想学习使用Simple Injector的正确方法。

1 个答案:

答案 0 :(得分:3)

如果要将每个助手注册到关联的db类(例如Person)

选项是向代表

注册
container.Register<IDbHelper<Person>>(() => new JsonDbWrapper<Person>("path","filename",Encoding.UTF8));
var result = container.GetInstance<IDbHelper<Person>>();