gpt4 book ai didi

c# - 依赖注入(inject)与泛型相结合

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:27 42 4
gpt4 key购买 nike

我已经非常熟悉依赖注入(inject) 和松散耦合组件的强大功能。当我出于教育目的试图增强或构建它时,我偶然发现了一个问题:

public interface IReader<TParameter, TOutput>
{
TOutput Read(TParameter parameter);
}

public class Customer : IReader<int, CustomerModel>
{
public CustomerModel Read(int parameter)
{
// Implementation...
}
}

当您尝试使用依赖注入(inject) 时,问题就来了。我尝试过:

public class Reader<TParameter, TOutput>
{
private IReader<TParameter, TOutput> reader;
public Reader(IReader<TParameter, TOutput> reader)
{
// Link through Constructor...
}
}

这行不通,但是在这个阶段,如果在此级别涉及泛型,您如何实现和执行依赖注入(inject)?有可能吗?

最佳答案

我同意一些评论,如果没有 IOC 框架或相当多的自定义反射,对于像这种情况这样的泛型,您将无法使用简单的 .NET 从 DI 中获得太多好处。您描述的模式似乎是一个代理模式,最后一个 Reader 类封装了接口(interface)。

为了清楚起见,通过重命名最后一个类 ReaderProxy,我试图让您的代码更进一步,希望展示如何在没有框架或通用对象的自定义初始化的情况下进行依赖注入(inject)可以简化实际的初始化行。

下面的代码将展示如何使用依赖注入(inject)(参见 fiddle :https://dotnetfiddle.net/cfNCyl)。

var reader = new ReaderProxy<int, CustomerModel>(new Customer());
var model = reader.Read(5);
Console.WriteLine(model.Id);

下面是上述代码所需的类和接口(interface)(包括一个简单的 CustomerModel):

public interface IReader<TParameter, TOutput>
{
TOutput Read(TParameter parameter);
}

public class Customer : IReader<int, CustomerModel>
{
public CustomerModel Read(int parameter)
{
return new CustomerModel() { Id = parameter };
}
}

public class CustomerModel
{
public int Id { get; set; }
}

public class ReaderProxy<TParameter, TOutput>
: IReader<TParameter, TOutput>
{
private IReader<TParameter, TOutput> reader;
public ReaderProxy(IReader<TParameter, TOutput> reader)
{
this.reader = reader;
}
public TOutput Read(TParameter parameter)
{
return this.reader.Read(parameter);
}
}

关于c# - 依赖注入(inject)与泛型相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894933/

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