Xerxes Battiwalla
2009-May-11 05:45 UTC
[Ironruby-core] Interface methods of internal class not defined in IR
Hi there, We are using a .NET library which comprises of several classes marked internal where each class exposes functionality through an interface. When attempting to call on these objects in IR, we get an "undefined method" exception. Is there a way to access the interface members of the class when it''s internal? I''ve created the following example to reproduce: ******* In C#: using System; namespace HelloWorldApp { public class HelloFactory { public IHelloWorld NewWorld() { return new HelloWorld(); } } public interface IHelloWorld { void SayHello(); } internal class HelloWorld: IHelloWorld // NOTE THE INTERNAL MODIFIER { public void SayHello() { throw new NotImplementedException(); } } } ******* In Ruby: require "HelloWorldApp.dll" class HelloWorldApp::HelloWorld def say_hello puts "Hello!!" end end @hello_factory = HelloWorldApp::HelloFactory.new @hello_app = @hello_factory.new_world puts "hello_app should be HelloWorldApp::IHelloWorld but was #{@hello_app.class}" @hello_app.say_hello ********* In this example, I expect the system to puts "Hello!!", but instead it throws the "undefined method" exception. If I run IR with the PrivateBindings option it works, but it seems like a workaround I shouldn''t have to do, because i''m passing the instance from C# to IR as the interfaced type (my conclusion therefore being it should be able to access it) Any help appreciated. Thanks, Xerx.
Tomas Matousek
2009-May-11 06:48 UTC
[Ironruby-core] Interface methods of internal class not defined in IR
You are right - it should work. We know about this issue. I''ll look at fixing it soon, maybe this week. Thanks, Tomas -----Original Message----- From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Xerxes Battiwalla Sent: Sunday, May 10, 2009 10:45 PM To: ironruby-core at rubyforge.org Subject: [Ironruby-core] Interface methods of internal class not defined in IR Hi there, We are using a .NET library which comprises of several classes marked internal where each class exposes functionality through an interface. When attempting to call on these objects in IR, we get an "undefined method" exception. Is there a way to access the interface members of the class when it''s internal? I''ve created the following example to reproduce: ******* In C#: using System; namespace HelloWorldApp { public class HelloFactory { public IHelloWorld NewWorld() { return new HelloWorld(); } } public interface IHelloWorld { void SayHello(); } internal class HelloWorld: IHelloWorld // NOTE THE INTERNAL MODIFIER { public void SayHello() { throw new NotImplementedException(); } } } ******* In Ruby: require "HelloWorldApp.dll" class HelloWorldApp::HelloWorld def say_hello puts "Hello!!" end end @hello_factory = HelloWorldApp::HelloFactory.new @hello_app = @hello_factory.new_world puts "hello_app should be HelloWorldApp::IHelloWorld but was #{@hello_app.class}" @hello_app.say_hello ********* In this example, I expect the system to puts "Hello!!", but instead it throws the "undefined method" exception. If I run IR with the PrivateBindings option it works, but it seems like a workaround I shouldn''t have to do, because i''m passing the instance from C# to IR as the interfaced type (my conclusion therefore being it should be able to access it) Any help appreciated. Thanks, Xerx. _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core