Pregunta

En mi proyecto estoy usando Autofac. Anteriormente se trabaja bien. Ahora he añadido algo de código nuevo en Autofac y me está dando " El delegado creación no debe devolver null " error.

Los cambios que he realizado son los siguientes

 builder.Register<Rep>(c => {
                                      /*Get Session and LoginId*/

                               return session.CreateQuery(@"from Rep where LoginId='" +
                                                   LoginId+ "'").List<Rep>().
                                                   FirstOrDefault() ?? new Rep();
                            });
 builder.Register<TestPermissionHelper>();

Ahora Global.asax en el Applicaiton_PostAuthenticate(), en el método TestPermissionHelper estoy resolver.

Lo interesante es que, cuando estoy golpeando la página de inicio de sesión en el momento en que me está dando error, de lo contrario se trabaja bien.

Yo sé que es difícil de entender toda la imagen de este pequeño código. Será genial si alguien, al menos, me puede decir, en general, ¿cuáles son las posibles razones para este tipo de error.

Gracias

Nota: Si se puede ayudar, yo también estoy dando el Seguimiento de la pila del error

    Stack trace:    at Autofac.Component.Activation.DelegateActivator.ActivateInstance(IContext context, IEnumerable`1 parameters)
   at Autofac.Component.Registration.ResolveInstance(IContext context, IEnumerable`1 parameters, IDisposer disposer, Boolean& newInstance)
   at Autofac.Context.TryResolve(Service service, Object& instance, IEnumerable`1 parameters)
   at Autofac.Context.Resolve(Service service, IEnumerable`1 parameters)
   at Autofac.Context.Resolve(Type serviceType, IEnumerable`1 parameters)
   at Autofac.Component.Activation.AutowiringParameter.<>c__DisplayClass2.<CanSupplyValue>b__0()
   at Autofac.Component.Activation.DirectConstructorInvoker.<InvokeConstructor>b__0(Func`1 pa)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Autofac.Component.Activation.DirectConstructorInvoker.InvokeConstructor(IContext context, IEnumerable`1 parameters, ConstructorInfo ci, Func`1[] args)
   at Autofac.Component.Activation.ReflectionActivator.ConstructInstance(ConstructorInfo ci, IContext context, IEnumerable`1 parameters, Func`1[] parameterAccessors)
   at Autofac.Component.Activation.ReflectionActivator.ActivateInstance(IContext context, IEnumerable`1 parameters)
   at Autofac.Component.Registration.ResolveInstance(IContext context, IEnumerable`1 parameters, IDisposer disposer, Boolean& newInstance)
   at Autofac.Context.TryResolve(Service service, Object& instance, IEnumerable`1 parameters)
   at Autofac.Context.Resolve(Service service, IEnumerable`1 parameters)
   at Autofac.Context.Resolve(Type serviceType, IEnumerable`1 parameters)
   at Autofac.Context.Resolve[TService](IEnumerable`1 parameters)
   at Autofac.Context.Resolve[TService](Parameter[] parameters)
   at Autofac.Container.Resolve[TService](Parameter[] parameters)
¿Fue útil?

Solución

La causa raíz del problema no parece estar en Autofac. En el caso de la tabla Rep tiene ninguna entrada para el ID de inicio de sesión se crea un nuevo objeto Rep. Si se utiliza como una dependencia de otros componentes, es necesario asegurarse de que no se refieren a propiedades de referencia no instanciados del objeto Rep.

Otros consejos

Su código parece lo suficientemente bueno y no puedo ver como la inscripción de delegados alguna vez volvería null menos que se produzca algún error.

Yo sugeriría a escribir algunas pruebas de unidad que intenta resolver TestPermissionHelper a cabo con diferentes valores de retorno (incluyendo nula) a partir del registro Rep. Con suerte usted es capaz de reproducir el error y aislar el estado en que se produce el error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top