Pergunta

Estou tendo a seguinte situação.

Temos um método privado onde desejo adicionar injeção de política usando um handlerAttribute.Este método é chamado por alguns métodos públicos diferentes definidos em minha interface.Estou instanciando o repositório em uma fábrica, onde retorno o objeto empacotado.Até agora não consegui fazer a injeção de política funcionar no meu método privado.Estou embrulhando o objeto de maneira errada?Também tentei criar o objeto empacotado instanciando diretamente um objeto de repositório.Até agora adicionei o atributo apenas aos métodos públicos, nesse caso adicionei o atributo na interface que está funcionando corretamente.Espero que alguém tenha uma idéia de como fazer isso funcionar.

Veja minha implementação abaixo:

// My factory implementation
public static ICacheRepository Repository()
{
    return PolicyInjection.Create<CacheRepository, ICacheRepository>();
}

// My repository 
public class CacheRepository : MarshalByRefObject, ICacheRepository
{
    public void Add(string name)
    {
        Check(name);
    }

    public void Update(string name)
    {
        Check(name);
    }

    public void Delete(string name)
    {
        Check(name);
    }

    [NotNull] // <= HandlerAttribute
    private bool Check(string name)
    {
        return true;
    }
}

// My CacheRepository interface.
public interface ICacheRepository
{
    void Add(string name);
    void Update(string name);
    void Delete(string name);
}
Foi útil?

Solução

Recebi ajuda sobre esse problema do suporte da Avanade no CodePlex.Eles me disseram que você só poderia interceptar métodos/propriedades públicas.Eles também me deram o link para as limitações do Enterprise Library Policy Injection Block, que pode ser encontrado no MSDN em: http://msdn.microsoft.com/en-us/library/ff650508.aspx#intro_limitations

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