Pergunta

Alguém sabe se é possível controlar os nomes dos tipos gerados através do Castle DynamicProxy? Eu esperava aproveitar a capacidade de persistir a montagem gerada pelo Castle para adicionar algumas classes adicionais com alguma funcionalidade específica ao meu projeto, mas gostaria de poder controlar os nomes desses tipos de procuração gerados. Qualquer ajuda seria muito apreciada.

Na verdade, planejo persistir instâncias dessas classes, bem como instâncias das classes originais que são as fontes dos proxies com o Nibernate. Portanto, preciso que esses nomes sejam consistentes em várias gerações da montagem.

Foi útil?

Solução

Eu fiz algumas escavações interessantes. Especificar nomes de proxy parece ser possível usando um inamingscope, mas está longe de ser direto para entrar com o InamingScope. iniciaria o proxygenerator:

public class CustomProxyFactory : AbstractProxyFactory {
    private static readonly ProxyGenerator ProxyGenerator = new ProxyGenerator(new CustomProxyBuilder());
    // remainder of code is identical
}

public class CustomProxyBuilder : DefaultProxyBuilder {
    public CustomProxyBuilder() : base(new CustomModuleScope()) {}
}

public class CustomModuleScope : ModuleScope {
    public CustomModuleScope() : base(false, false, new CustomNamingScope(), DEFAULT_ASSEMBLY_NAME, DEFAULT_FILE_NAME, DEFAULT_ASSEMBLY_NAME, DEFAULT_FILE_NAME) {}
}

public class CustomNamingScope : INamingScope {
    public CustomNamingScope() {}

    private CustomNamingScope(INamingScope parent) {
        ParentScope = parent;
    }

    public string GetUniqueName(string suggestedName) {
        // your naming logic goes here
    }

    public INamingScope SafeSubScope() {
        return new CustomModuleScope(this);
    }

    public INamingScope ParentScope { get; private set; }
}

Sinceramente, não tentei correr ou compilar nada disso. Apenas cavando o código -fonte Nibernate e Castle.Core. Espero que isso lhe dê algumas idéias ...

Outras dicas

Dê uma olhada no projeto Proxygenerators no NHContrib. Ele permite que você pré-genera os proxies de carregamento preguiçoso da Nibernate.

http://nhforge.org/wikis/Proxygenerators10/Default.aspx

Se você usa os proxygeneradores ou não, integra seus proxies personalizados ao Nibernate através da fábrica de proxy Factory. Em hibernate.cfg.xml:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="proxyfactory.factory_class">YOUR_PROXY_FACTORY_FACTORY</property>
  </session-factory>
</hibernate-configuration>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top