簡體   English   中英

通過 C# 中的接口使用泛型類型的 model

[英]Using generic type of model through interface in C#

我有兩個模型,例如:

public class ModelA {.....}
public class ModelB {.....}

現在,我有一個通用接口,例如:

public interface IRepository<TEntity> where TEntity : class
{
    Task<int> MethodA(TEntity entity);
    Task<int> MethodB(TEntity entity);
}

現在,有另一個接口繼承了之前的接口,如下所示。 但我不希望它只針對 ModelA。 我希望它是通用的 model。 因為 MethodA 將引用 ModelA 而 MethodB 將引用 ModelB。

public interface ITestRepository : IRepository<ModelA>
{
    Task<bool> AdditionalMethodA(int id);
    Task<bool> AdditionalMethodB(int id);
}

我想像這樣實現主要的 class 。 我想將 ModelA 傳遞給 MethodA,將 ModelB 傳遞給 MethodB。

public class MainRepository : ITestRepository
{
    public Task<int> MethodA(ModelA modelA) {......}
    public Task<int> MethodB(ModelB modelB) {......}
}

如何重構上述代碼,以便能夠擁有 model 的泛型類型? 任何幫助將不勝感激。 謝謝你。

我認為你想要的是每個接口一個方法,然后實現多個接口。

public class ModelA {}
public class ModelB {}

public interface IRepository<TEntity> where TEntity : class
{
    Task<int> Method(TEntity entity);
}
public interface ITestRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
    Task<bool> AdditionalMethod(int id);
}

public class MainRepository : ITestRepository<ModelA>, ITestRepository<ModelB>
{
    public Task<int> Method(ModelA entity)
    {
        throw new NotImplementedException();
    }
    public Task<int> Method(ModelB entity)
    {
        throw new NotImplementedException();
    }
    public Task<bool> AdditionalMethodA(int id)
    {
        throw new NotImplementedException();
    }
    public Task<bool> AdditionalMethodB(int id)
    {
        throw new NotImplementedException();
    }

    Task<bool> ITestRepository<ModelA>.AdditionalMethod(int id)
    {
        return AdditionalMethodA(id);
    }
    Task<bool> ITestRepository<ModelB>.AdditionalMethod(int id)
    {
        return AdditionalMethodB(id);
    }
}


class Program
{
    static async Task Main(string[] args)
    {
        var mainTest = new MainRepository();
        var a = new ModelA();
        var b = new ModelB();

        int xA = await mainTest.Method(a);
        int xB = await mainTest.Method(b);

        bool yA = await mainTest.AdditionalMethodA(0);
        bool yB = await mainTest.AdditionalMethodB(0);
    }
}

暫無
暫無

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

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