By default db4o uses the NetReflector. As alternative you can create your own reflector and use it with db4o. In order to do so you need to implement the IReflector interface. And then pass an instance of your implementation to db4o.
Here's an example of a logging reflector. Its only difference from standard reflector is that information about loaded classes is outputted to console:
internal class LoggerReflector : IReflector { private readonly IReflector readReflector; public LoggerReflector() { this.readReflector = new NetReflector(); } public LoggerReflector(IReflector readReflector) { this.readReflector = readReflector; } public void Configuration(IReflectorConfiguration reflectorConfiguration) { readReflector.Configuration(reflectorConfiguration); } public IReflectArray Array() { return readReflector.Array(); } public IReflectClass ForClass(Type type) { Console.WriteLine("Reflector.forClass({0})", type); return readReflector.ForClass(type); } public IReflectClass ForName(string className) { Console.WriteLine("Reflector.forName({0})", className); return readReflector.ForName(className); } public IReflectClass ForObject(object o) { Console.WriteLine("Reflector.forObject(" + o + ")"); return readReflector.ForObject(o); } public bool IsCollection(IReflectClass reflectClass) { return readReflector.IsCollection(reflectClass); } public void SetParent(IReflector reflector) { readReflector.SetParent(reflector); } public object DeepClone(object o) { return new LoggerReflector((IReflector) readReflector.DeepClone(o)); } }
Friend Class LoggerReflector Implements IReflector Private ReadOnly readReflector As IReflector Public Sub New() Me.readReflector = New NetReflector() End Sub Public Sub New(ByVal readReflector As IReflector) Me.readReflector = readReflector End Sub Public Sub Configuration(ByVal reflectorConfiguration As IReflectorConfiguration) _ Implements IReflector.Configuration readReflector.Configuration(reflectorConfiguration) End Sub Public Function Array() As IReflectArray _ Implements IReflector.Array Return readReflector.Array() End Function Public Function ForClass(ByVal type As Type) As IReflectClass _ Implements IReflector.ForClass Console.WriteLine("Reflector.forClass({0})", type) Return readReflector.ForClass(type) End Function Public Function ForName(ByVal className As String) As IReflectClass _ Implements IReflector.ForName Console.WriteLine("Reflector.forName({0})", className) Return readReflector.ForName(className) End Function Public Function ForObject(ByVal o As Object) As IReflectClass _ Implements IReflector.ForObject Console.WriteLine("Reflector.forObject(" & Convert.ToString(o) & ")") Return readReflector.ForObject(o) End Function Public Function IsCollection(ByVal reflectClass As IReflectClass) As Boolean _ Implements IReflector.IsCollection Return readReflector.IsCollection(reflectClass) End Function Public Sub SetParent(ByVal reflector As IReflector) _ Implements IReflector.SetParent readReflector.SetParent(reflector) End Sub Public Function DeepClone(ByVal o As Object) As Object _ Implements IReflector.DeepClone Return New LoggerReflector(DirectCast(readReflector.DeepClone(o), IReflector)) End Function End Class