[英]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,我不確定這是您要走的路。
為了使其正常工作 ,您可以注入CustomRepository
來Access
並通過IOC容器注冊所有依賴項。
public class Access
{
private readonly CustomerRepository customerRepository;
public Access(CustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
}
這就是依賴注入的工作方式。 一旦開始注入一次類,就同時注入其他類,這就是在運行時由容器解析對象依賴圖的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.