gpt4 book ai didi

c# - 注入(inject)通用接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:04 26 4
gpt4 key购买 nike

好的,我对 C# 中的泛型有点迷茫

我有这个通用接口(interface)

interface IInvoiceStorage<T>
where T : class
{
void Persist(T Invoice);
}

有两个实现接口(interface)的类

public class FacturaStorageForSQLServer:IInvoiceStorage<EVT>
{
public void Persist(EVT Invoice)
{
/*Implementation*/
}
}



public class FacturaStorageForMySQLServer:IInvoiceStorage<EVTFruit>
{
public void Persist(EVTFruit Invoice)
{
/*Implementation*/
}
}

当我想在我的服务类中声明它时,问题就来了

public class invoice_service
{
IInvoiceStorage Storage;
public invoice_service(IInvoiceStorage storage)
{
Storage=_storage;
}
}

C# 告诉我必须声明接口(interface)的 de 类型,但如果我这样做,那么我的服务类将依赖于实现而不是接口(interface)。

建议??

更新 1:抱歉,如果我声明类型,接口(interface)将仅依赖于使用该类型的实现,但如果我有两个使用两种不同类型(例如 EVT 和 EVTFruit)的实现,会发生什么情况。

我曾考虑使用另一个接口(interface)在 EVT 和 EVTFruit 之间建立关系,但它们可能是两个完全不同的对象,所以我不确定这是否是个好主意。

最佳答案

你可以稍微改变一下你的类(class):

public class invoice_service<T> where T : class
{
IInvoiceStorage<T> Storage;
public invoice_service(IInvoiceStorage<T> storage)
{
Storage=_storage;
}
}

这将使您能够正确使用界面并保持其通用性。

关于c# - 注入(inject)通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com