使用autofac将Int注册为KeyFilter

时间:2017-06-26 22:23:31

标签: c# autofac

我有以下课程:

resolvers += Resolver.jcenterRepo

libraryDependencies ++= Seq(
    "com.github.saurfang" %% "sparksql-protobuf" % "0.1.2",
    "org.apache.parquet" % "parquet-protobuf" % "1.8.1"

我想使用autofac注入依赖项。这两个参数都将从配置文件中获取。 这是我初始化类的代码。

public class A
{
    private string name;
    private int id;

    public A([KeyFilter("name")] string name, [KeyFilter("id")] int id)
    {
        this.name = name;
        this.id = id;
    }
}

上面的代码由于错误而无法编译"类型int必须是引用类型才能将其用作参数T ..."。 我意识到我需要另一种机制来注入整数。我尝试了Builder的其他功能,甚至在autofac文档中进行了研究,没有运气。

这里的一个解决方案可能是期望一个字符串id(而不是int id)作为字符串注入,最后在类A中解析它,但我不太喜欢那个解决方案。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Register方法获取lambda函数:

int id = int.Parse(ConfigurationManager.AppSettings["Id"]);
builder.Register(c => id).Keyed<int>("id"); 

RegisterInstance方法具有class约束,因为此方法旨在共享可以使用struct完成的对象的同一实例。有关您无法注册struct实例的原因的详情,请参阅Cannot register a struct instance with autofac