Pergunta

dizer que tenho um DLL montagem, contendo uma classe de auto-gerado com dois métodos:

public class AutoGeneratedClass
{
    public int DoSomething(bool forReal) { ??? }
    public void DoSomethingElse(string whatever) { ??? }
}

Os métodos poderia ser qualquer coisa, realmente. A descrição acima é apenas uma ilustração.

Que tipo de código que eu preciso para gerar no lugar de ??? acima para tê-lo automaticamente arrumar parâmetros da chamada e enviá-los para um método genérico único em outra classe, que seria, então, na verdade, lidar com a chamada e retornar o resultado?

public class GenericClass
{
    public ??? GenericHandler(???) { ??? }
}

Eu acho que eu estou procurando algo que funciona semelhante a Expression<Func<...>> em LINQ, que compila a uma estrutura de dados que podem ser enviados em qualquer lugar e desmontado lá.

Eu gostaria de manter o método original protótipos a mesma como se fossem normal, métodos implementados localmente, no entanto, para manter o chamador do AutoGeneratedClass não o mais sábio.

Se isto não pode ser alcançado, quais são as minhas opções?

Obrigado!

Foi útil?

Solução

Você tem que ter uma classe? A vida seria muito mais fácil o uso de interfaces - você pode usar System.Runtime.Remoting.Proxies.RealProxy ou, eventualmente, criar um novo tipo de demanda. Acredito Rhino.Mocks faz o último (usando uma biblioteca para fazer o trabalho pesado) -. e se você pode usar uma interface, vendo como Rhino.Mocks é implementado pode muito bem ser um ponto de partida boa

Outras dicas

Eu vou tomar uma facada no escuro aqui desde que eu não tenho certeza do que todas as suas limitações. Isso soa como um bom caso para métodos parciais / classe parcial para a sua classe gerado automaticamente. (Note que eu não executar este bom através de um compilador para que ele provavelmente precisa de alguma limpeza.)

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal);
    public int DoSomething(bool forReal)
    {
        //some generated code against error conditions??
        return ProcessDoSomething(forReal)
    }

    .....
}

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal)
    {
        //call the generic handler...
    }
}

Eu vou ficar longe do LINQ-como expressão parte do manipulador genérico desde que eu ainda estou trabalhando em Expressões Grokking. No entanto algo a considerar é o quão difícil / fácil será o seu GenericClass é a manutenção se você descer o LINQ-como expressão de caminho?

A minha experiência tem sido que muito poucos desenvolvedores não estão confortáveis ??com os delegados e expressões lamba. Eles encolher (literalmente) quando se olha para o código que usa expressões.

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