簡體   English   中英

Ninject循環依賴-已經使用屬性注入

[英]Ninject cyclic dependency - already using property injection

我在使用依賴項注入的項目中遇到循環依賴項問題。 在環顧四周時,除了進行重組(我也做過其中的一些工作)之外,似乎唯一避免這種情況的方法是使用屬性注入。 我試過了,似乎沒有幫助,但是我不確定為什么。 這是導致問題的路徑。

Activation path:
  6) Injection of dependency IUserRepository into property UserRepository of type ModelFactory{UserRole}
  5) Injection of dependency IUserRoleFactory into parameter userRoleFactory of constructor of type UserRoleService
  4) Injection of dependency IUserRoleService into property UserRoleService of type InternalUserBehavior
  3) Injection of dependency IInternalUserBehavior into parameter internalUserBehavior of constructor of type UserRepository
  2) Injection of dependency IUserRepository into parameter userRepository of constructor of type HomeController
  1) Request for HomeController

現在,似乎知道它正在使用屬性注入,並且所有行為和工廠都在同一個作用域(現在調用作用域,但我也嘗試過線程作用域)以及UserRepository。

我對過程的理解是應該達到4,並且能夠實際創建對象。 在這一點上,它應該具有對HomeController,IUserRepository和IInternalUserBehavior的引用。 然后,它應該在5上工作,並將完整的IUserRoleService插入InternalUserBehavior。 最后,它應該將先前實例化的用戶存儲庫(因為它在同一范圍內)插入到ModelFactory的屬性中

所以我想我的問題的簡短版本是:為什么屬性注入不能解決我的循環依賴問題?

這將有助於查看您的代碼...但是我認為您不了解此處的過程。

在步驟4) ,Ninject剛剛創建了InternalUserBehavior並正在注入屬性。 在步驟5) ,Ninject發現它需要創建UserRoleService並繼續執行步驟6)以創建然后填充ModelFactory{UserRole}

我假設您的課程如下所示:

public class UserRoleService
{
   public UserRoleService(ModelFactory<UserRole> factory){}
}

public class ModelFactory<T>
{
    [Inject]
    public IUserRepository UserRepository { get; set; }
}

不管屬性注入如何,您肯定具有循環依賴性。 您需要解決循環依賴性。

另一種方法是將Lazy<IUserRepository>與構造函數注入配合使用,以避免循環依賴性。 我有一個可以幫助您進行綁定的答案。

實際上,您的ModelFactory<>變為:

public class ModelFactory<T>
{
    [Inject]
    public Lazy<IUserRepository> UserRepository { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM