Frage

In meinem Projekt verwende ich Autofac. Zuvor arbeitete er in Ordnung. Jetzt habe ich ein paar neuen Code in Autofac hinzugefügt und es gibt mir „ Die Schaffung delegieren darf nicht null zurück “ Fehler.

Die Änderungen, die ich gemacht habe, sind folgt als

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

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

Jetzt im Global.asax, in Applicaiton_PostAuthenticate() Methode Ich Lösung TestPermissionHelper.

Das Interessante daran ist, dass, wenn ich die Login-Seite zu der Zeit bin schlage es mir Fehler geben, sonst funktioniert es gut.

Ich weiß, dass es schwer ist, das gesamte Bild von diesem kleinen Code zu verstehen. Es wird groß sein, wenn jemand zumindest kann mir sagen, in der Regel, was die mögliche Ursache für diese Art von Fehlern ist.

Danke

Hinweis: Wenn es helfen kann, ich bin auch den Stack-Trace des Fehlers geben

    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)
War es hilfreich?

Lösung

Die Ursache des Problems scheint nicht in Autofac zu sein. Falls die Rep-Tabelle keinen Eintrag für die Login-ID ein neues Rep-Objekt erstellen. Wenn als eine Abhängigkeit in anderen Komponenten verwendet wird, müssen Sie sicherstellen, dass sie beziehen sich nicht auf nicht-instanzierten Referenz Eigenschaften des Rep-Objekt.

Andere Tipps

Der Code scheint gut genug, und ich kann nicht sehen, wie die Teilnehmerregistrierung jemals null zurückkehren würde, wenn ein Fehler auftritt.

Ich würde vorschlagen, einige Unit-Tests zu schreiben, die mit verschiedenen Rückgabewert Lösung TestPermissionHelper versucht (einschließlich null) aus der Rep Registrierung. Hoffentlich Sie sind in der Lage den Fehler und zu isolieren, um den Zustand zu reproduzieren, in dem der Fehler auftritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top