为内部setter与私有setter生成NHibernate代理
为什么NHibernate可以为具有私有setter的属性的类创建代理,而不能为具有内部setter的属性的类创建代理?还是我遗漏了一些应该是显而易见的东西为内部setter与私有setter生成NHibernate代理,nhibernate,proxy,Nhibernate,Proxy,为什么NHibernate可以为具有私有setter的属性的类创建代理,而不能为具有内部setter的属性的类创建代理?还是我遗漏了一些应该是显而易见的东西 public class PrivateSetter { // no proxy error public virtual string PrivateSetterProperty { get; private set; } } public class InternalSetter { // proxy erro
public class PrivateSetter {
// no proxy error
public virtual string PrivateSetterProperty { get; private set; }
}
public class InternalSetter {
// proxy error
public virtual string InternalSetterProperty { get; internal set; }
}
您需要将setter标记为受保护的内部,以便代理类可以访问它:
public class InternalSetter
{
public virtual string InternalSetterProperty { get; protected internal set; }
}
您需要将setter标记为受保护的内部,以便代理类可以访问它:
public class InternalSetter
{
public virtual string InternalSetterProperty { get; protected internal set; }
}
这是一个纯粹的.NET语言问题。你自己试试吧:
public class A
{
public virtual string PrivateSetter { get; private set; }
public virtual string InternalSetter { get; internal set; }
}
在另一个组件中:
public class B : A
{
// works fine, private isn't derived at all
// you can omit the setter, make it public, internal to this
// assembly etc.
public override string PrivateSetter { get; set; }
// compilation time error: setter can't be overridden,
// there is no access to it.
public override string InternalSetter { get; internal set; }
}
顺便说一句,我只是在分析私有setter和代理的问题,所以我不确定代理在这种情况下是否真的有效。这是一个纯粹的.NET语言问题。你自己试试吧:
public class A
{
public virtual string PrivateSetter { get; private set; }
public virtual string InternalSetter { get; internal set; }
}
在另一个组件中:
public class B : A
{
// works fine, private isn't derived at all
// you can omit the setter, make it public, internal to this
// assembly etc.
public override string PrivateSetter { get; set; }
// compilation time error: setter can't be overridden,
// there is no access to it.
public override string InternalSetter { get; internal set; }
}
顺便说一句,我只是在分析私有setter和代理的问题,所以我不确定代理在这种情况下是否真的有效。使用什么代理工厂?城堡?林福?他们都有这种行为。但是,该异常是由NHibernate的实体验证器引发的。使用什么代理工厂?城堡?林福?他们都有这种行为。但是,该异常是由NHibernate的实体验证器引发的。讨论内部和受保护内部的区别。受保护的内部实际上是受保护的或内部的@Jamie,我们可以使用InternalsVisibleTo属性使Nhibernate或CastleProxy看到内部设置器吗?我知道受保护的内部设置器。我的问题是代理类如何访问私有setter而不是内部setter。在一个完全信任的环境中,你可以看到私人的东西,但不能看到内部的东西,反射有什么奇怪的地方吗?反射中不能识别内部成员,请参阅。我还没有尝试过InternalsVisibleTo,但一旦我发现受保护的internal有效,我一秒钟也没有给它。讨论内部和受保护内部的区别。受保护的内部实际上是受保护的或内部的@Jamie,我们可以使用InternalsVisibleTo属性使Nhibernate或CastleProxy看到内部设置器吗?我知道受保护的内部设置器。我的问题是代理类如何访问私有setter而不是内部setter。在一个完全信任的环境中,你可以看到私人的东西,但不能看到内部的东西,反射有什么奇怪的地方吗?反射中不能识别内部成员,请参阅。我还没有尝试过InternalsVisibleTo,但一旦我发现受保护的internal有效,我一秒钟也没有给它。