我有一個抽象工廠。今天,我想將它與ninject綁定。我不知道哪種方法是最好的,但我是這樣做的。然後我很艱難,我嘗試了提供者的方式。所以 我實現了提供者接口。問題是,我以這種方式呼叫kernel.Bind<IModelValidator>().ToProvider<ModelValidatingFactory>()
如何創建Ninject工廠
我不能使用ModelValidatingFactory insode的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方法?
我應該如何爲我的問題創建一個工廠,可以告訴我任何事情。這是最好的解決辦法,我應該通過無處不在拋出構造函數或注入到財產 – user1693057
@ user1693057:你談論的是要消耗工廠類?我個人更喜歡構造函數注入,但你可以谷歌「構造函數與屬性注入」來找到每個的優缺點。 – StriplingWarrior