<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" MadCap:lastBlockDepth="2" MadCap:lastHeight="120" MadCap:lastWidth="624" MadCap:disableMasterStylesheet="true" MadCap:tocPath="Advanced Features|db4o Reflection API" MadCap:InPreviewMode="false" MadCap:RuntimeFileType="Topic" MadCap:TargetType="WebHelp" MadCap:PathToHelpSystem="../../../" MadCap:HelpSystemFileName="index.xml" MadCap:SearchType="Stem"> <head><title>Creating your own reflector </title> <script type="text/javascript">/* <![CDATA[ */ window.onload = function(){ var pathToFlash = $('html').attr('MadCap:PathToHelpSystem') + 'Content/Resources/Code/ZeroClipboard.swf'; ZeroClipboard.setMoviePath(pathToFlash); function bindToClipBord(element,content){ var clip = new ZeroClipboard.Client(); clip.setText(content); clip.glue(element); }; if(location.protocol==='file:'){ $('.copylink-marker').remove(); } else{ $('.copylink-marker').each(function(){ var text = $(this).parent().parent().children('.prettyprint').html(); $(this).hover(function(){ bindToClipBord(this,text); }, function(){}); }); } prettyPrint(); }; /* ]]> */</script> <link href="../../SkinSupport/MadCap.css" rel="stylesheet" /> <link href="../../Resources/Stylesheets/OnlineStyle.css" rel="stylesheet" /> <script src="../../Resources/Code/prettify.js"> </script> <script src="../../Resources/Code/lang-vb.js"> </script> <script src="../../Resources/Code/jquery.min.js"> </script> <script src="../../Resources/Code/ZeroClipboard.js"> </script> <script src="../../SkinSupport/MadCapAll.js" type="text/javascript"> </script> </head> <body> <p class="MCWebHelpFramesetLink" style="display: none;"><a href="../../../index_CSH.html#advanced_topics/db4o_reflection_api/creating_your_own_reflector.htm" style="">Open topic with navigation</a> </p> <div class="MCBreadcrumbsBox"><span class="MCBreadcrumbsPrefix">You are here: </span><a class="MCBreadcrumbsLink" href="../../advanced_topics.htm">Advanced Features</a><span class="MCBreadcrumbsDivider"> > </span><a class="MCBreadcrumbsLink" href="../db4o_reflection_api.htm">db4o Reflection API</a><span class="MCBreadcrumbsDivider"> > </span><span class="MCBreadcrumbs">Creating your own reflector</span> </div> <p> <script type="text/javascript">/*<![CDATA[*/document.write('<a href="' + location.href +'">'); document.write("Direct Link"); document.write('</a>');/*]]>*/</script> </p> <p> </p> <h1>Creating your own reflector</h1> <p>By default db4o uses the <span MadCap:conditions="Primary..NET">NetReflector</span>. As alternative you can create your own reflector and use it with db4o. In order to do so you need to implement the <span MadCap:conditions="Primary..NET">I</span>Reflector interface. And then pass an instance of your implementation to db4o.</p> <p>Here's an example of a logging reflector. Its only difference from standard reflector is that information about loaded classes is outputted to console:</p> <div class="codesnippet" MadCap:conditions="Primary.c#"> <pre class="prettyprint" xml:space="preserve">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)); } }</pre> <div class="codesnippet-meta">ReflectorExamples.cs: Logging reflector <div class="codedownload"><a href="../../CodeExamples/reflection/Example-Code-reflection-csharp.zip" class="codedownload" MadCap:conditions="Primary.Online">Download Code</a></div><div class="codedownload copylink-marker" MadCap:conditions="Primary.Online"><a href="#copy">Copy Code</a></div></div> </div> <div class="codesnippet" MadCap:conditions="Primary.VB.NET"> <pre class="prettyprint lang-vb" MadCap:conditions="Primary.Online" xml:space="preserve">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</pre> <div class="codesnippet-meta">ReflectorExamples.vb: Logging reflector <div class="codedownload"><a href="../../CodeExamples/reflection/Example-Code-reflection-vb.zip" class="codedownload" MadCap:conditions="Primary.Online">Download Code</a></div><div class="codedownload copylink-marker" MadCap:conditions="Primary.Online"><a href="#copy">Copy Code</a></div></div> </div> <script type="text/javascript" src="../../SkinSupport/MadCapBodyEnd.js"> </script> </body> </html>