2009-08-06 14 views
3

Ich bemerkte in der Protokob-Net-changelog, dass IList <> wurde unterstützt, aber ich bekomme die Ausnahme "Kann keine Instanz einer Schnittstelle erstellen". Wenn ich zu IEnumerable <> wechsele, dann ist das Leben gut. Klingt das richtig?Passing IList <T> vs IEnumerable <T> mit 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; 
    } 

Danke, Mike

Außerdem gibt es Dokument Website, die diese und andere Antworten hat? Ich hasse es, neue Fragen zu stellen. :)

Antwort

2

Derzeit wird es IList<T> als Eigenschaft unterstützen, solange es nicht zu schaffen hat - dh so dass Dinge wie (Attribute der Kürze halber nicht dargestellt):

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

würde ich muss überprüfen, aber aus ähnlichen Gründen erwarte ich, dass es mit Merge funktionieren würde, aber nicht Deserialize (was die WCF-Hooks verwenden). Allerdings kann ich mir keinen Grund vorstellen, dass es nicht auf List<T> voreingestellt werden könnte ... es tut es gerade nicht.

Die einfachste Option ist wahrscheinlich mit List<T>/T[] zu bleiben - aber ich kann einen Blick, wenn Sie wollen ... aber ich bin in einem „Crunch“ auf einem (Arbeit) Projekt im Moment, so kann ich Heben Sie die Motorhaube heute nicht.


Re „diese und andere Antworten“ ... gibt es eine google group, aber das ist nicht nur protobuf-net (protobuf-net ist einfach eine von vielen „Protokollpuffer“ Implementierungen).

Sie können auch ein Problem auf der project site protokollieren. Ich meine, die FAQs zu sammeln und sie dem Wiki auf der Seite hinzuzufügen - aber die Zeit ist nicht immer mein Freund ...

Aber hey! Ich bin hier ... ;-p

Verwandte Themen