[Mono-list] A Plugin and WebService Issue

Mark Gimelfarb mark@dawebber.com
Sat, 22 May 2004 11:48:24 -0500


If I understand you correclty,
you can make use of the MethodInfo class to do method discovery.

Regards,
        Mark.

Quoting Pablo Fischer <pablo@pablo.com.mx>:

> Ok ok, sorry ;-)
> 
> If I want to create a plugin, I should generate the wsdl code of my
> webservice (SOAP) then compile it as a library.. this library is the
> plugin.
> 
> What I'm looking for is that, when the user tries to make it library,
> the user should compile it with a resource or another library. The
> resource SHOULD look in the code before making it a library.
> 
> What SHOULD look in the WSDL code?, methods, so the resource should look
> if the WSDL code has a : Post method, a DeletePost, etc. if these
> methods are ok, then make it a library with some AssemblyInfo.
> 
> Pablo
> El sáb, 22-05-2004 a las 11:08, Rob.Tillie@Student.tUL.EDU escribió:
> > I don't fully understand you.
> > If you require that any plugin implements your interface ( which should
> have
> > those methods of you like Post etc.) then you're fine.
> > What else should you want then?
> > 
> > Greetz,
> > -- Rob.
> > 
> > -----Original Message-----
> > From: Pablo Fischer [mailto:pablo@pablo.com.mx] 
> > Sent: Saturday, May 22, 2004 6:00 PM
> > To: mono-list@lists.ximian.com
> > Subject: RE: [Mono-list] A Plugin and WebService Issue
> > 
> > Sure,
> > 
> > I'd like to be sure that the plugin of the user has a 'Post' method for
> > example, or a 'DeletePost', if all the 'rules' are ok the code will be
> > compiled with an AssemblyInfo.
> > 
> > I know that I can verify if the method exists invoking it and if I get
> > Null there's no method, but I'd like to do this also in the compilation
> > process.
> > 
> > See ya!
> > El sáb, 22-05-2004 a las 00:22, Rob.Tillie@Student.tUL.EDU escribió:
> > > Could you tell us why you want to check the code?
> > > 
> > > Greetz,
> > > -- Rob.
> > > 
> > > -----Original Message-----
> > > From: Pablo Fischer [mailto:pablo@pablo.com.mx] 
> > > Sent: Thursday, May 20, 2004 5:04 PM
> > > To: mono-list@lists.ximian.com
> > > Subject: Re: [Mono-list] A Plugin and WebService Issue
> > > 
> > > Thanks people!
> > > 
> > > When I start writing my app (mbloggy) I was using Interfaces as plugins
> > > (xmlrpc plugins), then I started reading info about SOAP and I'm in
> love
> > > with it, the fact that SOAP supports any encoding makes me happy :-).
> > > 
> > > What I was looking for is to do the same that "Plugins in Mono" (M.
> > > Icaza) says :-).
> > > 
> > > However, I'd like to ask something else: I want EVERY plugin be
> compiled
> > > like I want, yeah, when I compile the plugin (the .dll) I'd like to
> > > check the methods and validate the plugin, if the plugin is ok, compile
> > > it and add some Assembly Info (AssemblyInfo, right?), where should I
> > > look?, NUnit I think is to check compiled applications but I want to
> > > 'check' my code BEFORE being a .dll.
> > > 
> > > Thanks!
> > > Pablo
> > > El jue, 20-05-2004 a las 05:38, RoBiK escribió:
> > > > Hi,
> > > > 
> > > > I would use this approach:
> > > > 
> > > > 1) you must have a plug-in Interface defined, that each plug-in must
> > > > implement
> > > > 2) when the application starts, use static
> > System.IO.Directory.GetFiles()
> > > > method to get the names of assemblies in the plug-in directory
> > > > 3) for each plug-in-assembly file call static
> > > > System.Reflection.Assembly.LoadFrom() method to load the assembly
> into
> > the
> > > > current AppDomain, then call the method
> > > > System.Reflection.Assembly.GetTypes() on the
> System.Reflection.Assembly
> > > > instance that you've got from the previous LoadFrom() method
> > > > 4) for each Type that you get from previous GetType() method use the
> > "is"
> > > > operator to check if the particular type implements the plug-in
> > interface,
> > > > if it does, you have a type that implements your plug-in interface. 
> > > > 5) call static Syste.Activator.CreateInstance() method with the type
> > from
> > > > previous step as parameter. Cast the result to the plug-in-interface
> > type
> > > > and store it for example in an array for later use.
> > > > 6) now you have an array of plug-in instances and can call the
> interface
> > > > methods on them
> > > > 
> > > > This is just an example, there are several other approaches which are
> > more
> > > > or less similar to this one... everything depends on the needs of
> your
> > > > application.
> > > > 
> > > > RoBiK
> > > > 
> > > > Quoting Pablo Fischer <pablo@pablo.com.mx>:
> > > > 
> > > > > Hi!
> > > > >
> > > > > I would like to have some comments and suggestions about a issue.
> > > > >
> > > > > I am working in a Blog Client (mbloggy) that will work ONLY in SOAP
> > (NO
> > > > > XMLRPC) for different CMS and Blogs (phpnuke, postnuke, jaws, etc,
> > etc).
> > > > > To work with all these blogs I'm  planning to use a 'plugin'
> system,
> > > > > based in assemblies, for example:
> > > > >
> > > > > If a developer wants the plugin for a CMS (like drupal), he can
> save
> > his
> > > > > .dll plugin in ~./mbloggy/plugins and when mbloggy starts it will
> read
> > > > > default plugins (in /etc/mbloggy) and the user plugins. When
> mbloggy
> > > > > finds a new plugin it will be added to a 'drop down' (gtk#) so the
> > user
> > > > > can use it.
> > > > >
> > > > > My problem?, yes, I don't know which is the best option:
> > > > >
> > > > > a) Use .dll assemblies as plugins. But, how to connect to each
> plugin
> > > > > from the front end?, exists a data type that can 'clone' another
> > > > > object?, so I can do something like this:
> > > > >
> > > > > Wrapper wrap = new Wrapper();
> > > > > wrap.Clone("assemblie.dll");
> > > > > wrap.Url = "http://www.foo.bar.com/foo.aspx?wsdl"
> > > > > wrap.DeletePost(3);
> > > > >
> > > > > So I can use the 'methods' of assemblie.dll in the wrap object?.
> > > > >
> > > > > b) Or use just one .dll and let the developers to 'develop' just
> the
> > > > > WebService (server)?, So I can just work like this:
> > > > >
> > > > > Client c = new Client();
> > > > > c.Url = "http://www.foo.bar.com/foo.aspx?wsdl"
> > > > > c.DeletePost(3);
> > > > >
> > > > > Which is the best option? and where can I find more information for
> > the
> > > > > best option?.
> > > > >
> > > > > Thanks!
> > > > > Pablo
> > > > > --
> > > > > Pablo Fischer Sandoval (pablo [arroba/at] pablo.com.mx)
> > > > > Fingerprint:  5973 0F10 543F 54AE 1E41  EC81 0840 A10A 74A4 E5C0
> > > > > http://www.pablo.com.mx
> > > > > http://www.debianmexico.org
> > > > >
> -- 
> Pablo Fischer Sandoval (pablo [arroba/at] pablo.com.mx)
> Fingerprint:  5973 0F10 543F 54AE 1E41  EC81 0840 A10A 74A4 E5C0
> http://www.pablo.com.mx 
> http://www.debianmexico.org
>