簡體   English   中英

Ninject綁定

[英]Ninject Binding

如何將我的接口綁定到不同程序集中的具體類?

我的解決方案中包含以下項目:

Foo.Data
Foo.Domain

在結構圖中,我將兩個程序集名稱添加到StructureMap.config文件中,然后使用PluginFamily和Pluggable屬性將接口映射到具體類。

Ninject如何完成同一件事?

我將在此處進行一些假設。

  1. 在Foo.Domain項目中有一個名為IBar的接口,在Foo.Data項目中有一個名為BarClass的具體類。
  2. 實際上,您在Foo.Data項目中引用了Foo.Domain項目,因為BarClass實現了IBar。

使用Ninject進行的最簡單的操作是在Foo.Data中創建一個新類,該類繼承自Ninject的StandardModule:

internal class BarModule : StandardModule {
  public override void Load() {
    Bind<IBar>()
      .To<BarClass>();
  }
}

然后,此類建立IBar請求與BarClass具體類的綁定。 這是您的XML等效項。

下一步是創建Ninject內核(也稱為“容器”)並為其提供該模塊(即此配置)。 您在哪里進行操作很大程度上取決於您要創建哪種類型的應用程序。 一般來說,通常將在代碼的邏輯入口點或“啟動”部分配置內核。 如果它是控制台或Windows桌面應用程序,則可能是main()函數首先要做的事情之一。

代碼如下:

var modules = new IModule[] {
                              new BarModule()
                            };

var kernel = new StandardKernel(modules);

此時,當您執行以下操作時:

var barObj = kernel.Get<IBar>()

變量barObj引用BarClass的實例。

所有人都說,我完全不可能完全了解您的應用程序的所有細微差別-例如,程序集是動態加載的,等等。希望這對您有所幫助。

暫無
暫無

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

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