J'ai fait quelques recherches intéressantes. La spécification des noms de proxy semble être possible en utilisant un INamingScope, mais il est loin d'être simple d'insérer l'INamingScope. Vous devez créer votre propre ProxyFactoryFactory, ce qui créerait une ProxyFactory identique à NHibernate.ByteCode.Castle.ProxyFactory, sauf initierait 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; }
}
Honnêtement, je n'ai pas essayé d'exécuter ou de compiler tout cela. Juste en train de creuser le code source de NHibernate et Castle.Core. Espérons que cela vous donne quelques idées ...
Mec, tu es mon héros. – yonkz
Je vais essayer dans les prochains jours et vous dire comment ça se passe. – yonkz
Sneaky très sournois;) Vous avez noté correctement __it est loin d'être simple et pour une raison. Ce n'était pas exactement destiné à être annulé.De toute façon si vous le faites, il y a une hypothèse (ne pas se souvenir si documenté) que la portée de nommage sera cohérente - pour donné 'suggestedName' il ** retournera toujours ** le même nom unique (évidemment il doit être unique donc encore , si vous appelez la méthode deux fois, elle doit toujours retourner la même seconde valeur, et ainsi de suite). Le processus de désérialisation en dépend. –