這可能是不太你所期望的,但確實做的伎倆:
builder.Register<MyType>(container =>
{
var s = container.Resolve<IMyService>();
var d = container.Resolve<ISomeDependency>();
var p1 = s.DoSomething();
var p2 = d.DoSomething(p1, true);
return new MyType(p1, p2);
});
或者,如果你想使用自動(構造)注射,您可以創建一個MyType
子類(在Composition Root內),它需要兩個依賴關係。這種類型可以很容易地註冊:
builder.RegisterType<AutofacMyType().As<MyType>();
// Define inside Composition Root
private sealed class AutofacMyType : MyType
{
public AutofacMyType(IMyService s, ISomeDependency d)
: this(s.DoSomething(), d) { }
private AutofacMyType(Something p1, ISomeDependency d)
: base(p1, d.DoSomething(p1, true)) { }
}
你希望Autofac調用該委託,並在該調用中注入'IMyService'和'ISomeDependency'? – Steven
@Steven:正是 –