J'ai une valeur dynamique (implémentation de IDynamicMetaObjectProvider) à laquelle j'appellerais méthodes et propriétés.Appelez les membres d'un IDynamicMetaObjectProvider sans faire référence à Microsoft.CSharp.dll
Exemples que j'ai trouvés jusqu'à présent d'appeler des membres sur un type d'utilisation de valeur dynamique à partir de Microsoft.CSharp.dll, par exemple.
IDynamicMetaObjectProvider x = GetDynamicValue();
CallSite<Func<CallSite, object, object, object>> site = CallSite<Func<CallSite, object, object, object>>.Create(
Binder.SetMember(
Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.None,
"Foo",
null,
new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) }
)
);
site.Target(site, x, 42);
Je veux être en mesure d'invoquer un des membres de IDynamicMetaObjectProvider sans utiliser Microsoft.CSharp.dll. Notez que je ne parle pas d'utiliser le mot-clé dynamique C# sur tout ce qui concerne C# mais en utilisant un IDynamicMetaObjectProvider directement.
Notez également que l'utilisation de Reflection ne fonctionnera pas. La réflexion contourne la liaison d'appel dynamique et effectue simplement une réflexion sur le type sous-jacent. J'ai besoin d'une technique qui fonctionne avec n'importe quelle implémentation de IDynamicMetaObjectProvider.
Mais pourquoi? N'est-ce pas un peu comme dire que je veux utiliser WPF sans faire référence à PresentationFramework.dll? – Josh
Vous pouvez utiliser la réflexion, mais vous devez appeler les membres de System.Dynamic.DynamicObject en utilisant la réflexion. – Steven
Je voudrais éviter la référence à Microsoft.CSharp.dll parce que c'est pour une bibliothèque et pas tout le monde utilise C# et veut utiliser une bibliothèque qui fait référence à une DLL spécifique C#. La réflexion ne fonctionnera pas car cela doit fonctionner avec n'importe quelle implémentation de IDynamicMetaObjectProvider, pas seulement DynamicObject. –