2009-08-06 5 views
3

J'ai remarqué dans le journal des modifications de protobuf-net que IList <> était supporté mais je reçois l'exception "Impossible de créer une instance d'une interface". Si je change à IEnumerable <> alors la vie est bonne. Est-ce que cela semble correct?Passage de IList <T> par rapport à IEnumerable <T> avec protobuf-net

// Client call 
    public override IList<IApplicationWorkflow> Execute(IRoleManagement service) 
    { 
     IList<ApplicationWorkflowMessagePart> list = service.RetrieveWorkflows(roleNames); 

     IList<IApplicationWorkflow> workflows = new List<IApplicationWorkflow>(list.Count); 

     foreach (ApplicationWorkflowMessagePart a in list) 
     { 
      workflows.Add(new ApplicationWorkflowImpl(a)); 
     } 

     return workflows; 
    } 


    // Service contract 
    [OperationContract, ProtoBehavior] 
    [ServiceKnownType(typeof (ServiceFault))] 
    [FaultContract(typeof (ServiceFault))] 
    IList<ApplicationWorkflowMessagePart> RetrieveWorkflows(string[] roleNames); 


    // Service implementation 
    public IList<ApplicationWorkflowMessagePart> RetrieveWorkflows(string[] roleNames) 
    { 
     IList<IApplicationWorkflow> workflows = manager.RetrieveApplicationWorkflows(roleNames); 
     IList<ApplicationWorkflowMessagePart> workflowParts = new List<ApplicationWorkflowMessagePart>(); 
     if (workflows != null) 
     { 
      foreach (IApplicationWorkflow workflow in workflows) 
      { 
       workflowParts.Add(
        ModelMediator.GetMessagePart<ApplicationWorkflowMessagePart, IApplicationWorkflow>(workflow)); 
      } 
     } 
     return workflowParts; 
    } 

Merci, Mike

Aussi, est-il le site de documents qui a ceci et d'autres réponses? Je déteste demander des nouvelles questions. :)

Répondre

2

Actuellement, il soutiendra IList<T> comme propriété, tant qu'il n'a pas à créer - dire permettant des choses comme (attributs non représentés par souci de concision):

class Order { 
    private IList<OrderLine> lines = new List<OrderLine>(); 
    public IList<OrderLine> Lines {get {return lines;}} 
} 

Je voudrais doit vérifier, mais pour des raisons similaires, je pense que cela fonctionnerait avec Merge, mais pas Deserialize (qui est ce que les crochets WCF utilisent). Cependant, je ne peux pas penser à une raison pour laquelle il ne pourrait pas par défaut à List<T> ... ce n'est tout simplement pas pour le moment.

L'option la plus simple est probablement de coller avec List<T>/T[] - mais je peux jeter un oeil si vous voulez ... mais je suis dans un "crunch" sur un projet (de travail) en ce moment, donc je peux Lève le capot aujourd'hui.


Re « et dans d'autres réponses » ... il y a un google group, mais ce n'est pas seulement protobuf-net (protobuf-net est tout simplement l'une des nombreuses implémentations « de tampons de protocole »). Vous pouvez également enregistrer un problème sur le project site. Je veux dire de rassembler la FAQ et de les ajouter au wiki sur le site - mais le temps n'est pas toujours mon ami ...

Mais bon! Je suis là ... ;-p