![](/img/trans.png)
[英]Create instance from web.config and with dependency injection in constructor with 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.