Oui, l'interface est implémentée par l'objet, et est connue à la fois par le client et le serveur.
Le client, evidemment, ne connais que l'interface.
Dans le client, j'arrive à trouver l'ID, qui est défini dans l'interface par une propriété.
En revanche, je n'arrive pas à utiliser l'indexeur, c'est à dire à faire un binding de la sorte:
1 2
| Binding Path=ID // Fonctionne
Binding Path=[ID] // Ne fonctionne pas. |
De plus, si je modifie ma structure de la sorte:
interface IMonObjet implémentée par MonObjetBase:
public class MonObjetBase : MarshallByRef, IMonObjetBase
MonObjetBase est connu à la fois de mon serveur et de mon client.
Tous les composants dérivent ensuite de MonObjetbase:
1 2
| public class MonObjet1 : IMonObjetbase {...}
public class MonObjet2 : IMonObjetbase {...} |
Que tout soit bien clair: le client ne connais que IMonObjet et l'implementation de base: MonObjetBase.
L'indexeur est défini dans MonObjetBase, qui utilise la réflexion pour trouver toutes les propriétés. En gros:
System.Reflection.PropertyInfo prop = type.GetProperty(propertyName.ToString());
Dans ce cas, mon binding marche lors de l'utilisation d'un objet MonObjetBase plutôt que IMonObjet. Mais cette solution ne me plait pas, car il faut que le client connaisse une implémentation, qui est alors utilisée plutôt que l'interface...
Partager