Thx will do that... JIRA still down??
On Jul 10, 2:10 pm, Fabio Maulo <[email protected]> wrote: > Very interesting. > Change the conf of NHibernate Tests project and run all tests with your > UnityBytecode and you will see the result. > btw, please check our JIRA about this issue and then add a zip with all > files needed (in this case could be better than a patch file). > > > > On Fri, Jul 9, 2010 at 5:11 PM, Dawid <[email protected]> wrote: > > Hi, > > > Without understanding most of the inner technical details of > > nHibernate, it would seem as if I've gotten Unity Interception to work > > as the LazyInitializer. > > > Code for the LazyInitializer: > > class LazyInitializer: BasicLazyInitializer, IInterceptionBehavior > > { > > public bool _constructed; > > > public LazyInitializer(string entityName, Type persistentClass, > > object id, MethodInfo getIdentifierMethod, MethodInfo > > setIdentifierMethod, IAbstractComponentType componentIdType, > > ISessionImplementor session) > > : base(entityName, persistentClass, id, getIdentifierMethod, > > setIdentifierMethod, componentIdType, session) > > { > > } > > > public IMethodReturn Invoke(IMethodInvocation input, > > GetNextInterceptionBehaviorDelegate getNext) > > { > > var result = input.CreateMethodReturn(null); > > if (_constructed) > > { > > > var args = new object[input.Arguments.Count]; > > input.Arguments.CopyTo(args, 0); > > result.ReturnValue = base.Invoke((MethodInfo)input.MethodBase, > > args, input.Target); > > if (result.ReturnValue == InvokeImplementation) > > { > > //var input2 = new > > VirtualMethodInvocation(GetImplementation(), input.MethodBase, > > input.Arguments); > > result = > > input.CreateMethodReturn(input.MethodBase.Invoke(GetImplementation(), > > args)); > > } > > } > > return result; > > } > > > public IEnumerable<Type> GetRequiredInterfaces() > > { > > return new[] {typeof (INHibernateProxy)}; > > } > > > public bool WillExecute > > { > > get { return true; } > > } > > > Code for the Proxy Factory: > > class UnityProxyFactory: AbstractProxyFactory > > { > > public override INHibernateProxy GetProxy(object id, > > ISessionImplementor session) > > { > > INHibernateProxy proxy; > > try > > { > > LazyInitializer initializer = new LazyInitializer(EntityName, > > PersistentClass, id, GetIdentifierMethod, SetIdentifierMethod, > > ComponentIdType, session); > > object obj2 = IsClassProxy > > ? > > Intercept.NewInstanceWithAdditionalInterfaces(PersistentClass, new > > VirtualMethodInterceptor(), > > > new[] {initializer}, Interfaces) > > : > > Intercept.NewInstanceWithAdditionalInterfaces(Interfaces[0], new > > VirtualMethodInterceptor(), > > > new[] {initializer}, Interfaces); > > initializer._constructed = true; > > proxy = (INHibernateProxy)obj2; > > } > > catch (Exception exception) > > { > > //log.Error("Creating a proxy instance failed", exception); > > throw new HibernateException("Creating a proxy instance > > failed", exception); > > } > > return proxy; > > > } > > } > > > Any comments / ideas? What sort of unit tests is required to make sure > > that Unity Interception is actually working correctly? > > > Regards, > > Dawid Mostert > > -- > Fabio Maulo
