C#中的泛型类

时间:2019-03-20 05:28:28

标签: c# generics

我有以下模板类和接口

public class UseCaseResponse<T> where T : class 
{
  //......
}

public interface IPresenter<T> where T : UseCaseResponse<T>, new()
{
    void Handle(T response);
}
public class JsonPresenter<T> : IPresenter<T> where T : UseCaseResponse<T>, new()
{

    public void Handle(T response)
    {
        throw new NotImplementedException();
    }
}

现在我的问题是如何创建不同的 JSonPresenter 对象 就像我可以做到的一样,

ServiceCollection s = new ServiceCollection();
s.AddScoped<UseCaseResponse<Person>, UseCaseResponse<Person>>();
var provider = s.BuildServiceProvider();
var p = (UseCaseResponse<Person>)p.GetService(typeof(UseCaseResponse<Person>));

那行得通,但是如何获得JsonPresenter<UseCaseResponse<Person>>对象?

1 个答案:

答案 0 :(得分:0)

对于泛型,您只需要在创建类型的实例时指定具体的类型参数即可。对于您想要的JsonPresenter<UseCaseResponse<Person>>,它应该是:

var presenter = new JsonPresenter<UseCaseResponse<Person>>();

现在您可以这样做:

//p is the UseCaseResponse instance from your second code sample
presenter.Handle(p);