Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 2e9c43658e374d290a2de15d25134ac8 > files > 379

db4o-doc-8.0-1.fc15.i686.rpm

<?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"> &gt; </span><a class="MCBreadcrumbsLink" href="../db4o_reflection_api.htm">db4o Reflection API</a><span class="MCBreadcrumbsDivider"> &gt; </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(" &amp; Convert.ToString(o) &amp; ")")
        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>