簡體   English   中英

使用靜態構造函數創建ninject依賴關系

[英]Create a ninject Dependency with static constructor

我已經為我的Nhibernate數據訪問方法創建了一個工作單元包裝器。 我在UnitOfWork類的靜態構造函數中初始化會話工廠,希望將其初始化一次且僅一次。

public class UnitOfWork : IUnitOfWork
{
  private static readonly ISessionFactory _sessionFactory;
  static UnitOfWork()
    {
        var oracleConfiguration = OracleDataClientConfiguration.Oracle10.ConnectionString(ConfigurationManager.ConnectionStrings[Constants.CONNECTION_STRING].ConnectionString);
        _sessionFactory = Fluently.Configure()
                          .Database(oracleConfiguration)
                          .Mappings(m => m.FluentMappings.Add<MyMap>())
                          .BuildSessionFactory();
    }
}

然后,我在應用程序啟動期間將此unitOfWork依賴項與Ninject內核綁定,然后期望Ninject在我的數據訪問存儲庫的構造函數中解析它。 (我正在使用構造函數注入)。

public class Module : NinjectModule
{
    public override void Load()
    {
         Bind<IUnitOfWork>().To<UnitOfWork>();
    }                                                                       
}

但是解決之后,我可以理解靜態構造函數內部的代碼從未在對象創建期間執行過,因此我的Nhibernate Session工廠為null。

我絕對可以肯定我在這里遺漏了一些東西。 有人可以幫助我了解在Ninject中使用靜態構造函數的正確方法是什么嗎?

謝謝

您希望您的Uow構造函數僅執行一次,因此您將其聲明為靜態。 為什么不這樣做,但是它不應該使用訪問修飾符( public關鍵字)進行編譯。 靜態構造函數不接受訪問修飾符(或參數)。 您確定您的代碼有效嗎?

我想您實際上已經嘗試過使用無效的訪問修飾符。

我不知道如何在不先觸發其靜態構造函數的情況下使用類型。 也許NInject能夠做到這一點。 在這種情況下,只能使用更清潔的解決方案:使用單例生命周期和適當的代碼將會話工廠添加到NInject進行實例化(基本上是您當前的Uow構造函數所做的事情),並設置Uow以使其具有依賴關系。

暫無
暫無

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

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