我相信这就是您正在寻找的
class B
{
public B(string key, C anotherDependency)
{
this.Key = key;
}
public string Key { get; private set; }
}
class C
{
public string Value { get { return "C.Value"; } }
}
[TestMethod]
public void test()
{
var cb = new ContainerBuilder();
cb.RegisterType<B>().WithParameter(
(prop, context) => prop.Name == "key",
(prop, context) => context.Resolve<C>().Value);
cb.RegisterType<C>();
var b = cb.Build().Resolve<B>();
Assert.AreEqual("C.Value", b.Key);
}
您可能要考虑的另一种方式是
class B
{
public B(string key) { ... }
public B(C c) : this(c.Value) { }
}
这意味着您不需要在组合根中进行任何特殊处理 - Autofac 将自动选择第二个构造函数(假设C
已注册string
且未注册)。