[英]How to use Ninject inside a c# class library
我在MVC Web應用程序中使用了Ninject,沒有注入業務邏輯類的任何問題。 但我想將數據訪問類注入業務邏輯類的構造函數。 邏輯層是一個類庫,沒有Program.cs類或入口點。
public class DataAccessClass
{
public void Insert(Product product)
{
new SqlObj().Insert(Product);
}
}
public Interface IDataAccessClass()
{
void Insert(Product product);
}
public class ProductLogic()
{
IDataAccessClass _dataAccessClass;
//DataAccessClass should be injected here using Ninject
public ProductLogic(IDataAccessClass dataAccessClass)
{
_dataAccessClass=dataAccessClass;
}
public InsertProduct(Product product)
{
_dataAccessClass.Insert(product);
}
}
這就是我需要的,我有一個3層應用程序,層是:
因此, Web
層對我的DAL
層一無所知。 我在DAL
有存儲庫接口和具體類,它們在業務邏輯類的BLL
層中使用。 問題是,為了解耦DAL
和BLL
,如何設置Ninject以將我的存儲庫實現注入BLL
層?
使用Nuget安裝NInject
Install-Package Ninject
您可以創建一個注冊對象的方法。 您需要注冊創建對象所需的所有依賴項。
public static void Register(IKernel kernel)
{
kernel.Bind<IDataAccessClass>().To<DataAccessClass>();
kernel.Bind<ProductLogic>().ToSelf();
}
創建StandardKernel
的新實例並調用Register
以注冊對象。
要獲取對象的實例,只需調用Get<>
方法,您將獲得該對象的新內容。 還有其他方法。
static void Main(string[] args)
{
var kernel = new StandardKernel();
Register(kernel); // register the objects
var productLogic = kernel.Get<ProductLogic>(); // create instance
}
要解決這個問題,只有BLL
看到DAL
你可以添加一個新項目( 類庫 )來安裝NInject並創建Register
方法。 您可以在Web
項目中引用此類庫並注冊實體。
對象
public class Product
{
}
public class DataAccessClass : IDataAccessClass
{
public void Insert(Product product)
{
}
}
public interface IDataAccessClass
{
void Insert(Product product);
}
public class ProductLogic
{
IDataAccessClass _dataAccessClass;
//DataAccessClass should be injected here using Ninject
public ProductLogic(IDataAccessClass dataAccessClass)
{
_dataAccessClass = dataAccessClass;
}
public void InsertProduct(Product product)
{
_dataAccessClass.Insert(product);
}
}
我剛剛遇到這篇文章並且與原始海報有同樣的潛在誤解,直到我理解為止:
類庫就是庫,庫。 它們不控制依賴項的注入。 DI被配置在任何應用程序使用這些庫(無論是控制台,ASP.NET,WPF,WinForms或其他),即使這些注入僅在類庫中。
當我將核心模型和實體框架(使用工作單元)移動到一個單獨的類庫中以便重用時,我遇到了這個問題。 我花了幾個小時試圖弄清楚該類庫如何配置它的DI,最后它是MVC Web應用程序引用需要處理它的類庫。
換句話說,在我的實際應用程序的引導程序中,我需要綁定在我引用的類庫中使用的接口/具體類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.