2013-05-30 140 views
0

我有一個抽象工廠。今天,我想將它與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方法?

回答

0

如果我理解正確的話,你擔心的是,要提供具體的構造函數的參數給工廠,那構造函數的參數是不是東西,Ninject會知道如何綁定。

您應該能夠設置綁定,以便Ninject知道如何生成工廠實例。這樣的事情:

kernel.Bind<IModelValidator>() 
     .ToProvider<ModelValidatingFactory>(); 
kernel.Bind<ModelValidatingFactory>() 
     .ToConstant(new ModelValidatingFactory(/*pass your parameter */)); 
+0

我應該如何爲我的問題創建一個工廠,可以告訴我任何事情。這是最好的解決辦法,我應該通過無處不在拋出構造函數或注入到財產 – user1693057

+0

@ user1693057:你談論的是要消耗工廠類?我個人更喜歡構造函數注入,但你可以谷歌「構造函數與屬性注入」來找到每個的優缺點。 – StriplingWarrior