<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=text/html;charset=iso-8859-1 http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.7930.16421"></HEAD>
<BODY style="PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 15px" 
id=MailContainerBody leftMargin=0 topMargin=0 CanvasTabStop="true" 
name="Compose message area">
<DIV><FONT face=Calibri>Hi,</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>I'm working on C# bindings. The goal is to obtain a more 
C# API for the API users.</FONT></DIV>
<DIV><FONT face=Calibri>So I have create object for libvirt familly function (an 
object Connect, Domain, Storage and so on).</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>All is almost done, but I need and advice about the way 
to handle object properties. For example, for the Connect object, I expose a 
"RunningDomains" property that can be used in this manner :</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>Connect myConn = new 
Connect("qemu+tcp://192.168.220.198/system");</FONT></DIV>
<DIV><FONT face=Calibri>List<Domain> runningDomains = 
myConn.RunningsDomains;</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>In the Connect object, the property "RunningDomains" is 
coded in this :</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT color=#808080 size=2 face=Consolas><FONT color=#808080 size=2 
face=Consolas><FONT color=#808080 size=2 face=Consolas>
<P>///</FONT></FONT></FONT><FONT color=#008000 size=2 face=Consolas><FONT 
color=#008000 size=2 face=Consolas><FONT color=#008000 size=2 face=Consolas> 
</FONT></FONT></FONT><FONT color=#808080 size=2 face=Consolas><FONT 
color=#808080 size=2 face=Consolas><FONT color=#808080 size=2 
face=Consolas><summary></P></FONT></FONT></FONT><FONT size=2 
face=Consolas><FONT size=2 face=Consolas>
<P></FONT></FONT><FONT color=#808080 size=2 face=Consolas><FONT color=#808080 
size=2 face=Consolas><FONT color=#808080 size=2 
face=Consolas>///</FONT></FONT></FONT><FONT color=#008000 size=2 
face=Consolas><FONT color=#008000 size=2 face=Consolas><FONT color=#008000 
size=2 face=Consolas> Get the list of running 
domains</P></FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas>
<P></FONT></FONT><FONT color=#808080 size=2 face=Consolas><FONT color=#808080 
size=2 face=Consolas><FONT color=#808080 size=2 
face=Consolas>///</FONT></FONT></FONT><FONT color=#008000 size=2 
face=Consolas><FONT color=#008000 size=2 face=Consolas><FONT color=#008000 
size=2 face=Consolas> </FONT></FONT></FONT><FONT color=#808080 size=2 
face=Consolas><FONT color=#808080 size=2 face=Consolas><FONT color=#808080 
size=2 face=Consolas></summary></P></FONT></FONT></FONT><FONT size=2 
face=Consolas><FONT size=2 face=Consolas>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>public</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas> </FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT 
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2 
face=Consolas>List</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas><</FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT 
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2 
face=Consolas>Domain</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas>> RunningDomains</P>
<P>{</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>    get</P></FONT></FONT></FONT><FONT size=2 
face=Consolas><FONT size=2 face=Consolas>
<P>    {</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>        if</FONT></FONT></FONT><FONT 
size=2 face=Consolas><FONT size=2 face=Consolas> (_conn == </FONT></FONT><FONT 
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2 
face=Consolas><FONT color=#2b91af size=2 
face=Consolas>IntPtr</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas>.Zero) </FONT></FONT><FONT color=#0000ff size=2 
face=Consolas><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas>return</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT 
size=2 face=Consolas> </FONT></FONT><FONT color=#0000ff size=2 
face=Consolas><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas>null</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT 
size=2 face=Consolas>;</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>        int</FONT></FONT></FONT><FONT 
size=2 face=Consolas><FONT size=2 face=Consolas> nbRunningDomain = 
NumOfDomains(_conn);</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>        int</FONT></FONT></FONT><FONT 
size=2 face=Consolas><FONT size=2 face=Consolas>[] runningDomainIds = 
</FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>new</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas> </FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT 
color=#0000ff size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>int</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas>[nbRunningDomain];</P>
<P>        ListDomains(_conn, 
runningDomainIds, nbRunningDomain);</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>        return</FONT></FONT></FONT><FONT 
size=2 face=Consolas><FONT size=2 face=Consolas> runningDomainIds.Select(id 
=> </FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas><FONT color=#0000ff size=2 
face=Consolas>new</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas> </FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT 
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2 
face=Consolas>Domain</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas>(</FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT 
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2 
face=Consolas>Domain</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2 
face=Consolas>.LookupByID(_conn, id), </FONT></FONT><FONT color=#0000ff size=2 
face=Consolas><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff 
size=2 face=Consolas>this</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT 
size=2 face=Consolas>)).ToList();</P>
<P>    }</P>
<P>}</P>
<P> </P>
<P><FONT size=3 face=Calibri>So the property call "virConnectNumOfDomains" and 
"virConnectListDomains" each time the property is called. And I don't know if it 
is a good thing. The other way, is to keep the list in the Connect object and 
handle domain adding or removing in this via callbacks. This avoid multiple call 
to the librar.</FONT></P>
<P><FONT size=3 face=Calibri></FONT> </P>
<P><FONT size=3 face=Calibri>Any advice ?</FONT></P>
<P><FONT size=3 face=Calibri></FONT> </P>
<P><FONT size=3 face=Calibri>Regards,</FONT></P>
<P><FONT size=3 face=Calibri></FONT> </P>
<P><FONT size=3 face=Calibri>Arnaud</FONT></P></FONT></FONT></DIV></BODY></HTML>