我有以下课程:
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中解析它,但我不太喜欢那个解决方案。 有什么建议吗?
答案 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。