2014-03-28 45 views
0

我想配置我的綁定。Ninject:如何綁定ToMethod

 Bind<DbContext>().To<HangTagVerwaltungContext>(); 
     Bind<IUnitOfWork>() 
      .ToConstructor(
       x => new UnitOfWork(true, true, x.Inject<DbContext>())); 

     // Managers 
     Bind<ITagManager>().To<TagManager>(); 

     // ViewModels 
     Bind<TagEditViewModel>().ToMethod(
      context => 
      { 
       IUnitOfWork unitOfWork = context.Kernel.Get<IUnitOfWork>(); 
       ITagManager tagManager = 
        context.Kernel.Get<ITagManager>(
         new Parameter(@"unitOfWork", unitOfWork, false)); 

       return new TagEditViewModel(tagManager, 
        context.Kernel.Get<INavigationService>(), unitOfWork); 
      }); 

我的問題是,每次他創造了TagManager一個新的UnitOfWork,而不是使用參數我給他在ToMethod方法。我錯了什麼?

Thx for the Help。 Dennis

回答

1

我想你應該使用ConstructorArgument而不是Parameter。參數名稱必須與構造函數的名稱相匹配。

但是,爲什麼你這麼做這麼複雜? (DI是爲了讓你更容易,而不是更復雜。)是否因爲你需要爲tagManager和TagEditViewModel使用相同的IUnitOfWork實例?

如果是這樣,還有其他方法可以實現這一點。你應該看看範圍。它們用於使對象樹的某個部分使用相同的實例。

對於您展示的場景,您可能想嘗試使用.InCallScope(),但通常對於IUnitOfWork,還有其他一些在整個應用程序中工作得更好的東西,比如用於Web項目的.InRequestScope()或其他一些自定義作用域。還有其他的stackoverflow問題已經覆蓋這個問題。