我有一个抽象的工厂。今天,我想用ninject绑定它。我不知道哪种方式最好,但我这样做了。然后我很努力,我尝试了提供者的方式。所以
我实现了提供程序接口。问题是,我以这种方式打电话kernel.Bind<IModelValidator>().ToProvider<ModelValidatingFactory>()
我不能使用ModelValidatingFactory的IModelValidatingFactory,所以我必须给出一个参数什么是工厂(列表)。 我想为IModelValidator接口创建一个工厂。我想使用类类型作为键。我如何为构造函数提供参数,或者哪种方法可以使其工作?我应该使用什么密钥,因为如果我使用类型我必须传递它,我不喜欢使用字符串作为类型
我观看了Ninject的.ToFactory
方法,但我不明白。我看到更多的实施可能性。你对我有什么建议?
// this is what I would like to try, but there are some error with this. I can not reference to the type, and I can not give factory
public class ModelValidatingFactory : Provider<IModelValidator>, TandoCare.Desktop.Infrastructure.ModelValidating.IModelValidatingFactory
{
public IDictionary<Type, Func<IModelValidator>> validationFactory = new Dictionary<Type, Func<IModelValidator>>();
public ModelValidatingFactory(IDictionary<Type, Func<IModelValidator>> factory)
{
//validationFactory.Add(typeof(PatientModel), () => new PatientRegistrationValidator());
validationFactory = factory;
}
protected override IModelValidator CreateInstance(Ninject.Activation.IContext context)
{
return validationFactory[context.Request.Target.Type]();
}
public IModelValidator GetValidator(object model)
{
Type type = model.GetType();
return validationFactory[type]();
}
public IModelValidator this[object lookedType]
{
get
{
Type type = lookedType.GetType();
return validationFactory[type]();
}
}
}
我应该如何以这种方式使用.ToFactory方法?
答案 0 :(得分:0)
如果我理解正确,你担心的是你想为你的工厂提供一个特定的构造函数参数,那个构造函数参数不是Ninject知道如何绑定的东西。
您应该能够设置绑定,以便Ninject知道如何生成工厂的实例。像这样:
kernel.Bind<IModelValidator>()
.ToProvider<ModelValidatingFactory>();
kernel.Bind<ModelValidatingFactory>()
.ToConstant(new ModelValidatingFactory(/*pass your parameter */));