簡體   English   中英

使用IOC(控制反轉)進行依賴注入

[英]Dependency injection using IOC (Inversion of Control)

我有界面

 public interface IDatabase
 {
        void AddRow(string table, string value);
 }

它實現於

 public class Database : IDatabase
 {
     public void AddRow(string table,string value)
     {

     }
 }

現在我在做依賴注入

public class CustomerRepository
{
     private readonly IDatabase _database;
     private readonly string ss;
     public CustomerRepository()
     {

     }
     public CustomerRepository(IDatabase database)
     {
        this._database = database;
     }
     public void Add(string customer,string table)
     {
        _database.AddRow(customer, table);
     }
}

我正在從下面的類訪問CustomerRepository Add方法

public class Access
{
    CustomerRepository customerRepository = new CustomerRepository();
    public void InsertRecord()
    {
        customerRepository.Add("customer", "name");
    }
}

現在,當我調用CustomerRepository類的Add方法時,我將獲得_database null。

現在我在做依賴注入

是的,您正在使用依賴項注入,但是您調用的是錯誤的構造函數

CustomerRepository customerRepository = new CustomerRepository();

您的類也有一個空的構造函數,它不接受IDatabase 因此,在實例化類時不會提供它,這就是為什么它為null的原因。

您不能通過直接提供IDatabase具體類型來使用注入:

CustomerRepository customerRepository = new CustomerRepository(new ConcreteDatabase());

但是,如果您開始使用DI,我不確定這是您要走的路。

為了使其正常工作 ,您可以注入CustomRepositoryAccess並通過IOC容器注冊所有依賴項。

public class Access
{
    private readonly CustomerRepository customerRepository;
    public Access(CustomerRepository customerRepository)
    {
        this.customerRepository = customerRepository;
    }
}

這就是依賴注入的工作方式。 一旦開始注入一次類,就同時注入其他類,這就是在運行時由容器解析對象依賴圖的方式。

暫無
暫無

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

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