Pergunta

Eu tenho implementado IDynamicObject em C # 4, retornar uma subclasse MetaObject personalizado que faz simples propriedade getter / setter expedição para um dicionário. Não ciência do foguete.

Se eu fizer isso:

dynamic foo = new DynamicFoo();

foo.Name = "Joe";

foo.Name = "Fred";

Console.WriteLine(foo.Name);

Em seguida, 'Joe' é impresso para o console ... a segunda chamada para setter 'Nome' nunca é invocado (nunca pisa no meu código despachante costume em todos).

Eu sei que o DLR faz caching callsite, mas eu assumi que não se aplicaria aqui. Alguém sabe o que está acontecendo?

Foi útil?

Solução

Whatever MetaObject você está retornando a partir de (Bind) SetMember serão armazenados em cache e re-utilizado neste caso. Você tem 2 sites dinâmicos fazendo sets. A chamada 1ª irá armazenar em cache o resultado em um cache L2 que o 2º site vai pegar antes de pedir-lhe para produzir uma nova regra.

Assim, qualquer metaobjeto você está retornando necessidades para incluir uma árvore de expressão que irá atualizar o valor. Por exemplo, ele deve fazer algo como:

retornar nova MetaObject ( Expression.AssignProperty (this.Expression, value.Expression), Restrictions.TypeRestriction (this.Expression, this.Value.GetType ());

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top