Esiste un design per C # che rimuova la necessità di dinamiche?

-1

Ho un servizio web che implementa Pattern di deposito e mi chiedevo se c'è un disegno in C # che può rimuovere la necessità di "dinamico" quando lo si inserisce nel mio metodo.

public interface IRepositoryPlan : IRepository<PlanDetail>
{
    // methods...
}

public interface IRepositoryFlan : IRepository<FlanDetail>
{
    // methods...
}

public interface IRepository<T> where T : class
{
    IList<T> Retrieve();
}

Sto utilizzando NancyFx come framework del mio servizio web.

public class ClassModule : NancyModule
{
    public ClassModule(IRepositoryPlan repoPlan, IRepositoryFlan repoFlan)
    {
        Get["/RetrievePlan"] = _ =>
        {
            RetrieveMethod(repoPlan);
        }

        Get["/RetrieveFlan"] = _ =>
        {
            RetrieveMethod(repoFlan);
        }
    }

    RetrieveMethod(dynamic repoPFlan)
    {
          dynamic detail = repoPFlan.Retrieve();
    }
}

Esiste un design per la rimozione di "dynamic" nel mio RetrieveMethod? So che posso semplicemente usare il metodo di overloading qui e ho due RetrieveMethods ma cosa posso fare se ho più repository che devo recuperare?

    
posta Vince Orio 08.10.2018 - 09:21
fonte

1 risposta

1

Qualcosa del genere dovrebbe funzionare:

public class ClassModule : NancyModule
{
    public ClassModule(IRepositoryPlan repoPlan, IRepositoryFlan repoFlan)
    {
        Get["/RetrievePlan"] = _ =>
        {
            RetrieveMethod(repoPlan);
        }

        Get["/RetrieveFlan"] = _ =>
        {
            RetrieveMethod(repoFlan);
        }
    }

    RetrieveMethod<T>(IRepository<T> repo)
    {
        // don't care about type of detail, as View will use reflection to access the properties
        dynamic detail = repo.Retrieve();
    }
}
    
risposta data 08.10.2018 - 10:03
fonte

Leggi altre domande sui tag