gpt4 book ai didi

nhibernate - CaSTLe DynamicProxy 生成的类名

转载 作者:行者123 更新时间:2023-12-04 06:41:14 25 4
gpt4 key购买 nike

有人知道是否可以控制通过 CaSTLe DynamicProxy 生成的类型的名称?我希望利用持久化由 CaSTLe 生成的程序集的能力,将一些具有某些特定功能的附加类添加到我的项目中,但我希望能够控制这些生成的代理类型的名称。任何帮助将不胜感激。

我实际上计划保留这些类的实例以及作为 NHibernate 代理源的原始类的实例。因此,我需要这些名称在程序集的多代中保持一致。

最佳答案

我做了一些有趣的挖掘。使用 INamingScope 指定代理名称似乎是可能的,但是将 INamingScope 嵌入其中远非简单。您需要创建自己的 ProxyFactoryFactory,它将创建一个与 NHibernate.ByteCode.CaSTLe.ProxyFactory 相同的 ProxyFactory,除了它将初始化 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; }
}

老实说,我还没有尝试运行或编译任何这些。只是挖掘 NHibernate 和 CaSTLe.Core 源代码。希望它能给你一些想法......

关于nhibernate - CaSTLe DynamicProxy 生成的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4205637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com