我正在 ethnicGroup: AbstractControl;
form: FormGroup;
type: AbstractControl;
constructor(
private _fb: FormBuilder) {
this.form = this._fb.group(
{
'type': [ '', ],
'ethnicGroup': [ '', ]
} );
this.type = this.form.controls[ 'type' ];
this.ethnicGroup = this.form.controls[ 'ethnicGroup' ]
}
尝试使用Autofac的parameterized instantiation解析间接依赖关系。
假设我有以下类:
DependencyResolutionException
现在假设我想要public interface IMuffin {}
public class Muffin : IMuffin
{
public Muffin(IButter butter) {}
}
public interface IButter {}
public class Butter : IButter
{
public Butter(IKnife knife) {}
}
public interface IKnife {}
,但我想提供IMuffin
依赖项作为参数,如下所示:
IKnife
问题是,我在public class Breakfast
{
public Breakfast(Func<IKnife, IMuffin> muffinFactory)
{
var muffin = muffinFactory(new Knife());
}
private class Knife : IKnife {}
}
抱怨工厂无法使用可用参数和服务来解析muffinFactory(new Knife())
构造函数的IKnife
依赖关系时遇到异常。这没有任何意义,因为我提供了Butter
的实例作为工厂的参数。
这似乎应该有效。我错过了什么?
答案 0 :(得分:0)
您示例中的工厂是IMuffin
的工厂,您的IKnife
参数传递为typed parameter。但是,您的Muffin
课程不需要IKnife
个实例。它需要一个IButter
实例。
IKnife
类需要Butter
个实例。但是,传递给工厂的参数只能用于创建Muffin
实例,并且不用于解析Muffin
的依赖关系。 muffinFactory
的正确类型为Func<IButter, IMuffin>
。
要使您的示例正常工作,您需要两个工厂:
public class Breakfast
{
public Breakfast(Func<IKnife, IButter> butterFactory, Func<IButter, IMuffin> muffinFactory)
{
var butter = butterFactory(new Knife());
var muffin = muffinFactory(butter);
}
private class Knife : IKnife { }
}