> Sure, and I understand his reasons and agree with them. That reasoning
does
> not extend to runtime-discovery and subclass proxy generation though.
>
> This is just something they've never really considered, and with C#5 in
the
> making it's very unlikely they ever will. For whatever reasons.
>
> I think it's just unbelievable how little the CLR and C# teams take the
> needs of frameworks into account. They are complicating their own stuff,
> like Policy Injection (a term probably coined to get AOP past Anders
> unnoticed ;-)) or Code Contracts. But hey, if some designer-happy VS guy
> wants partial methods, they get it. A nod from the Office team? New COM
> interop in C# 4(!).
good points.
I've posted an email on the C# insiders mailinglist (the C# team
reads /posts there) asking whether they want to consider IL weaving/class
loaders for C# / .NET vNext. Not sure if it will be successful, but we can
always try ;)
FB
> </rant>
>
>
>
> From: [email protected] [mailto:nhibernate-
> [email protected]] On Behalf Of Ayende Rahien
> Sent: Tuesday, September 21, 2010 11:37 PM
> To: [email protected]
> Subject: Re: [nhibernate-development] Re: Proxy with lazy fields does not
> implement INHibernateProxy
>
>
>
> Remember that Andres is the reason we have non virtual by default.
>
> He is extremely conservative.
>
> On Tue, Sep 21, 2010 at 11:17 PM, Wenig, Stefan <[email protected]>
> wrote:
>
> compiler as a service would do that on a whole different level, I would
not
> think that any existing code could be leveraged to use that...
>
>
>
> the CLR is not as far from that point as one would think. it would just
need
> to put everything in vtables and put some rules into place for runtime
> subclassing/overriding. you'd pay for that in terms of an additional level
> of indirection for members that are now non-virtual, but that could be an
> option (per app domain, per assembly, what have you).
>
>
>
> or it could be implemented by compilers. just tell the compiler to make
> everything virtual internally, but control compile-time overriding via
> attributes. done.
>
>
>
> I know it's never quite as easy, but that's not the problem. They just
> refuse to think about it because they have other plans, and they don't see
a
> reason to fix the problem now.
>
>
>
> ________________________________
>
> From: [email protected] [nhibernate-
> [email protected]] on behalf of Ayende Rahien
[[email protected]]
> Sent: Tuesday, September 21, 2010 23:11
>
>
> To: [email protected] <mailto:nhibernate-
> [email protected]>
>
> Subject: Re: [nhibernate-development] Re: Proxy with lazy fields does not
> implement INHibernateProxy
>
> Actually, compiler as a service is supposed to be able to allow this.
>
> But, to be fair to Andres, you literally can't do this. You would have to
> re-write the CLR in order to allow this.
>
> On Tue, Sep 21, 2010 at 11:05 PM, Wenig, Stefan <[email protected]>
> wrote:
>
> you can intercept private member access using in-process remoting. it just
> requires some native code ;-) (at least it worked in .net 1.0, I'd have to
> find the code in some old VSS(!) repository...)
>
> jokes aside, I once talked to anders hejlsberg at the lang.net
> <http://lang.net> symposium.
> i proposed to make it possible to override non-virtual members (private is
> not the problem in the CLR, these are orthogonal concepts there) for
> subclass proxies that are generated at run time.
> the reasoning being that, like in reflection, you don't introduce a
> dependency if you discover the target at run time, same thing as in
> reflection (e.g. serializing all private fields).
> also, unlike IL weaving or a boo-like C#5, this could be used by existing
> frameworks like castle.
>
> anders' answer was basically "interesting. so you want to be able to
change
> the behaviour of anything?" - and off he was.
>
> long story short: unlikely ;-)
>
> ________________________________________
> From: [email protected] [nhibernate-
> [email protected]] on behalf of Frans Bouma [[email protected]]
> Sent: Tuesday, September 21, 2010 18:36
> To: [email protected]
> Subject: RE: [nhibernate-development] Re: Proxy with lazy fields does not
> implement INHibernateProxy
>
>
> > That is the cost to pay for a very cool feature in .NET (so far).
> > Before see the ISet, inside the framework, we had to wait the needs of
> > EF4 (around 9 years).
> > To have Proxy support inside the .NET perhaps we have to wait others
> > one
> or
> > two years.
> > To have static-proxy directly supported by the compiler (to
> > efficiently intercept the access to a private field) perhaps in others 4
> or 5 years...
> > if we all don't create enough noise to speed up the change a little bit.
>
> I fear that will never happen. What should happen is IL weaving
> inside the CLR. Unfortunately, powerful forces inside MS either hate AOP
> like stuff to death or think it can be outsourced to the DLR (is that
still
> alive?)
>
> But never is a big word, for what I know the CLR team moves
> incredibly slow so I wouldn't hold my breath
>
> FB
>
> >
> >
> > On Tue, Sep 21, 2010 at 1:02 PM, Ayende Rahien <[email protected]>
wrote:
> >
> >
> > That is pretty much the point.
> > There isn't an unproxy stage for an entity with lazy fields.
> >
> > To give you an example: User.Image is lazy
> >
> > var user = session.Load<User>(1); // user is a proxy
> > NHibernateUtil.Initialize(user); // select id,name from user
> > where
> id
> > = 1
> > var unproxiedUser =
> > ((INHibernateProxy)user).GetImplementation();
> >
> > unproxiedUser is also proxy, because it need to intercept the
> > get_Image call
> >
> > On Tue, Sep 21, 2010 at 5:43 PM, Allan Ritchie
> > <[email protected]> wrote:
> >
> >
> > The problem is more widespread then just the LINQ
provider.
> > You can't
> > unproxy the entity even at later stages outside of the
> > LINQ provider.
> >
> >
> > On Sep 21, 9:18 am, pvginkel <[email protected]> wrote:
> > > I would be very surprised if this really would be a
> > bug, because this
> > > would make the Linq provider unusable when enabling
> > lazy properties.
> > > Feedback is very welcome.
> > >
> > > On Sep 21, 2:36 pm, Allan Ritchie
> <[email protected]>
> > wrote:
> > >
> > > > I filed this as a bug. It was claimed not to be a
> > bug which is fine,
> > > > but contrib packages like nhibernate validator seem
> > to fail against
> > > > lazy property proxies because of this exact issue.
> > Can anyone say
> > > > what the workaround is for this situation?
> > >
> > > > On Sep 20, 7:33 am, pvginkel <[email protected]>
wrote:
> > >
> > > > > I have a Linq query which takes an entity as
> parameter.
> > This entity
> > > > > itself is a proxy loaded with another Linq query
> > and
> has
> > lazy
> > > > > properties. In "ReflectHelper.cs(267): Assembly
> assembly
> > =
> > > > > Assembly.Load(name.Assembly);" I get an
> > FileNotFoundException because
> > > > > it tries to load the assembly of the proxy class.
> > It looks like the
> > > > > problem is that
> > NHibernateProxyHelper.GetClassWithoutInitializingProxy
> > > > > can't determine the type of the entity because the
> proxy
> > does not
> > > > > implement INHibernateProxy, so it returns the type
> > of the proxy.
> > >
> > > > > Is this something I can solve in my configuration,
> > or
> is
> > something
> > > > > else going on here?
> > >
> > > > > I am using a nightly build of the NH3 trunk.
> >
> >
> >
> >
> >
> >
> > --
> > Fabio Maulo
> >
>
>
>
>