簡體   English   中英

使用Ninject內核作為工作單元對象工廠

[英]Using the Ninject kernel as a Unit of Work object factory

因此,我開始使用Ninject進行依賴項注入,並且想知道人們對使用內核作為工作單元類型對象(如Linq2Sql Datacontexts)的對象工廠的想法。 我只是像普通的依賴項一樣注入它們,但這引入了一些我想避免的對象生存期問題。 DataContext與常規依賴項有所不同,因為您應該根據需要啟動新實例,並在完成后將其處置。

為了做這樣的事情,我只需要設置一個像這樣的提供者...

class SomeDataContextProvider : Provider<SomeDataContext>
{
    private static string _connectionString = "someConnectionString"
    protected override SomeDataContext CreateInstance(IContext context)
    {
        return new SomeDataContext(_connectionString);
    }
}

將它們綁定到模塊中...

class MyModule : Ninject.Modules.NinjectModule
{
    public override void Load()
    {
        Bind<SomeDataContext>().ToProvider(SomeDataContextProvider);
    }
}

並在需要時使用標准內核...

class MyClassThatNeedsADataContext
{
    private StandardKernel _kernel = new StandardKernel(new MyModule());

    public void SomeMethod()
    {
        using (var db = _kernel.Get<SomeDataContext>())
        {
            //Use the context
        }
    }
}

對於本質上是靜態工廠的工廠來說似乎有點沉重,但無論如何我還是在使用Ninject進行其他工作。 我喜歡它為團隊中的成員提供了一個工廠約定,而不僅僅是讓他們隨風而動(在怪異的地方創建了一堆不同的工廠類,或者只是在對象上放置靜態方法等)。

有什么想法嗎? 有沒有更好的方法使用依賴項注入來處理工作單元依賴項,例如DataContexts或WCF服務客戶端?

我不喜歡將容器注入類中,因為它在您的應用程序和容器之間創建了一個依賴關系,並使得不清楚類具有什么依賴關系。 我真的看不出這種方法如何在工廠中為您帶來任何收益,因此我個人將創建一個“ DataContextFactory”並將其注入需要訪問數據庫的任何類中。

暫無
暫無

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

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