为内部setter与私有setter生成NHibernate代理

为内部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

为什么NHibernate可以为具有私有setter的属性的类创建代理,而不能为具有内部setter的属性的类创建代理?还是我遗漏了一些应该是显而易见的东西

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有效,我一秒钟也没有给它。