I am occasionally (not consistently) getting the following exception:
Message="The type initializer for 'DV.Lib.Query' threw an exception."
(lots of callstack stuff missing)
Message="Can not register property Params after containing type (ListCore) has been instantiated"
at Csla.Core.FieldManager.PropertyInfoManager.RegisterProperty[T](Type objectType, PropertyInfo'1 info)
at Csla.BusinessBase'1.RegisterProperty[P](PropertyInfo'1 info)
at DV.Lib.Query..cctor() in C:\Develop\dotNet\DV\DV.Lib\Qry\Query.vb:line 104
Some background - "DV.Lib.ListCore" inherits off of BusinessBase. "DV.Lib.Query" inherits from "ListCore", and "Params" is a child collection property off of "Query". Whenever I get this error, it is during the creation of one of the subclasses of ListCore - almost like "RegisterProperty" doesn't like things where there's an extra subclass layer between my class and BusinessBase.
And, just to really throw things off, this happens only occasionally. I could stop the program and retrace the steps exactly and not run into the same exception.
Params is declared off of "DV.Lib.Query" as follows:
Private Shared ParamsProperty As PropertyInfo(Of QueryParameters) = RegisterProperty(New PropertyInfo(Of QueryParameters)("Params"))
Public ReadOnly Property Params() As QueryParameters
If Not FieldManager.FieldExists(ParamsProperty) Then
LoadProperty(Of QueryParameters)(ParamsProperty, QueryParameters.NewObject)
Return GetProperty(Of QueryParameters)(ParamsProperty)
Did you ever figure this out?
I'm having the same problem. :(
I strongly recommend using the RegisterProperty() overload that accepts a lambda expression for the property, so CSLA can just do the right thing for you.
The RegisterProperty() call you show is invalid - the first parameter needs to be the type of the declaring class. And that is a source of numerous copy-paste bugs, which is why the lambda is better - with the lambda CSLA can figure out the containing type for you.
Copyright (c) Marimer LLC