Re: [Mono-list] Instantiating an object via AppDomain.CreateInstance
Anyway, it is now fixed in CVS. On dj, 2004-06-17 at 18:49, Lluis Sanchez wrote: > Looks like a bug. Can you please file a bug report in > bugzilla.ximian.com? > > Thanks! > Lluis. > > On dj, 2004-06-17 at 17:55, Yuri Leikind wrote: > > Hello all, > > > > > > If I instantiate an object via AppDomain.CreateInstance , and this object's > > class has a constructor with parameters, I get the exception > > > > Unhandled Exception: System.MissingMethodException: Constructor not found. > > > > though needed parameters are passed to AppDomain.CreateInstance > > > > I found it out trying an example from Programming C#, 2nd edition. This example > > runs on MS .NET and fails on Mono. > > > > Here is it : > > > > > > using System; > > using System.Runtime.Remoting; > > using System.Reflection; > > namespace ProgCSharp > > { > >// for marshal by reference comment out > >// the attribute and uncomment the base class > >[Serializable] > >public class Point // : MarshalByRefObject > >{ > > public Point (int x, int y) > > { > > Console.WriteLine( "[{0}] {1}", > > System.AppDomain.CurrentDomain.FriendlyName, > > "Point constructor"); > > this.x = x; > > this.y = y; > > } > > public int X > > { > > get > > { > > Console.WriteLine( "[{0}] {1}", > >System.AppDomain.CurrentDomain.FriendlyName, > >"Point x.get"); > > return this.x; > > } > > set > > { > > Console.WriteLine( "[{0}] {1}", > >System.AppDomain.CurrentDomain.FriendlyName, > >"Point x.set"); > > this.x = value; > > } > > } > > public int Y > > { > > get > > { > > Console.WriteLine( "[{0}] {1}", > >System.AppDomain.CurrentDomain.FriendlyName, > >"Point y.get"); > > return this.y; > > } > > set > > { > > Console.WriteLine( "[{0}] {1}", > >System.AppDomain.CurrentDomain.FriendlyName, > >"Point y.set"); > > this.y = value; > > } > > } > > > > > >private int x; > >private int y; > > } > > // the shape class marshals by reference > > public class Shape : MarshalByRefObject > > { > >public Shape(int upperLeftX, int upperLeftY) > >{ > > Console.WriteLine( "[{0}] {1}", > > System.AppDomain.CurrentDomain.FriendlyName, > > "Shape constructor"); > > upperLeft = new Point(upperLeftX, upperLeftY); > >} > >public Point GetUpperLeft( ) > >{ > > return upperLeft; > >} > >public void ShowUpperLeft( ) > >{ > > Console.WriteLine( "[{0}] Upper left: {1},{2}", > > System.AppDomain.CurrentDomain.FriendlyName, > > upperLeft.X, upperLeft.Y); > >} > >private Point upperLeft; > > } > > public class Tester > > { > >public static void Main( ) > >{ > > Console.WriteLine( "[{0}] {1}", > > System.AppDomain.CurrentDomain.FriendlyName, > > "Entered Main"); > > // create the new app domain > > AppDomain ad2 = > > AppDomain.CreateDomain("Shape Domain"); > > // Assembly a = Assembly.LoadFrom("ProgCSharp.exe"); > > // Object theShape = a.CreateInstance("Shape"); > > // instantiate a Shape object > > ObjectHandle oh = ad2.CreateInstance( > > "ProgCSharp", > > "ProgCSharp.Shape", false, > > System.Reflection.BindingFlags.CreateInstance, > > null, new object[] {3, 5}, > > null, null, null ); > > Shape s1 = (Shape) oh.Unwrap( ); > > s1.ShowUpperLeft( ); // ask the object to display > > // get a local copy? proxy? > > Point localPoint = s1.GetUpperLeft( ); > > // assign new values > > localPoint.X = 500; > > localPoint.Y = 600; > > // display the value of the local Point object > > Console.WriteLine( "[{0}] localPoint: {1}, {2}", > >System.AppDomain.CurrentDomain.FriendlyName, > >localPoint.X, localPoint.Y); > > s1.ShowUpperLeft( ); // show the value once more > > } > >} > > } > > > > > > > > Here is the output: > > > > [EMAIL PROTECTED]:~$ mono ProgCSharp.exe > > [ProgCSharp.exe] Entered Main > > > > Unhandled Exception: System.MissingMethodException: Constructor not found. > > > > Server stack trace: > > in <0x0019a> System.Activator:CreateInstance > > (System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[]) > > in <0x00074> System.Activator:CreateInstance > > (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalizati
Re: [Mono-list] Instantiating an object via AppDomain.CreateInstance
Looks like a bug. Can you please file a bug report in bugzilla.ximian.com? Thanks! Lluis. On dj, 2004-06-17 at 17:55, Yuri Leikind wrote: > Hello all, > > > If I instantiate an object via AppDomain.CreateInstance , and this object's > class has a constructor with parameters, I get the exception > > Unhandled Exception: System.MissingMethodException: Constructor not found. > > though needed parameters are passed to AppDomain.CreateInstance > > I found it out trying an example from Programming C#, 2nd edition. This example > runs on MS .NET and fails on Mono. > > Here is it : > > > using System; > using System.Runtime.Remoting; > using System.Reflection; > namespace ProgCSharp > { >// for marshal by reference comment out >// the attribute and uncomment the base class >[Serializable] >public class Point // : MarshalByRefObject >{ > public Point (int x, int y) > { > Console.WriteLine( "[{0}] {1}", > System.AppDomain.CurrentDomain.FriendlyName, > "Point constructor"); > this.x = x; > this.y = y; > } > public int X > { > get > { > Console.WriteLine( "[{0}] {1}", >System.AppDomain.CurrentDomain.FriendlyName, >"Point x.get"); > return this.x; > } > set > { > Console.WriteLine( "[{0}] {1}", >System.AppDomain.CurrentDomain.FriendlyName, >"Point x.set"); > this.x = value; > } > } > public int Y > { > get > { > Console.WriteLine( "[{0}] {1}", >System.AppDomain.CurrentDomain.FriendlyName, >"Point y.get"); > return this.y; > } > set > { > Console.WriteLine( "[{0}] {1}", >System.AppDomain.CurrentDomain.FriendlyName, >"Point y.set"); > this.y = value; > } > } > > >private int x; >private int y; > } > // the shape class marshals by reference > public class Shape : MarshalByRefObject > { >public Shape(int upperLeftX, int upperLeftY) >{ > Console.WriteLine( "[{0}] {1}", > System.AppDomain.CurrentDomain.FriendlyName, > "Shape constructor"); > upperLeft = new Point(upperLeftX, upperLeftY); >} >public Point GetUpperLeft( ) >{ > return upperLeft; >} >public void ShowUpperLeft( ) >{ > Console.WriteLine( "[{0}] Upper left: {1},{2}", > System.AppDomain.CurrentDomain.FriendlyName, > upperLeft.X, upperLeft.Y); >} >private Point upperLeft; > } > public class Tester > { >public static void Main( ) >{ > Console.WriteLine( "[{0}] {1}", > System.AppDomain.CurrentDomain.FriendlyName, > "Entered Main"); > // create the new app domain > AppDomain ad2 = > AppDomain.CreateDomain("Shape Domain"); > // Assembly a = Assembly.LoadFrom("ProgCSharp.exe"); > // Object theShape = a.CreateInstance("Shape"); > // instantiate a Shape object > ObjectHandle oh = ad2.CreateInstance( > "ProgCSharp", > "ProgCSharp.Shape", false, > System.Reflection.BindingFlags.CreateInstance, > null, new object[] {3, 5}, > null, null, null ); > Shape s1 = (Shape) oh.Unwrap( ); > s1.ShowUpperLeft( ); // ask the object to display > // get a local copy? proxy? > Point localPoint = s1.GetUpperLeft( ); > // assign new values > localPoint.X = 500; > localPoint.Y = 600; > // display the value of the local Point object > Console.WriteLine( "[{0}] localPoint: {1}, {2}", >System.AppDomain.CurrentDomain.FriendlyName, >localPoint.X, localPoint.Y); > s1.ShowUpperLeft( ); // show the value once more > } >} > } > > > > Here is the output: > > [EMAIL PROTECTED]:~$ mono ProgCSharp.exe > [ProgCSharp.exe] Entered Main > > Unhandled Exception: System.MissingMethodException: Constructor not found. > > Server stack trace: > in <0x0019a> System.Activator:CreateInstance > (System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[]) > in <0x00074> System.Activator:CreateInstance > (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Security.Policy.Evidence) > in <0x00055> System.AppDomain:CreateInstance > (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Security.Policy.Evidence) > in (unmanaged) (wrapper managed-to-native) > System.Runtime.Remoting.RemotingServices:InternalExecute > (System
[Mono-list] Instantiating an object via AppDomain.CreateInstance
Hello all, If I instantiate an object via AppDomain.CreateInstance , and this object's class has a constructor with parameters, I get the exception Unhandled Exception: System.MissingMethodException: Constructor not found. though needed parameters are passed to AppDomain.CreateInstance I found it out trying an example from Programming C#, 2nd edition. This example runs on MS .NET and fails on Mono. Here is it : using System; using System.Runtime.Remoting; using System.Reflection; namespace ProgCSharp { // for marshal by reference comment out // the attribute and uncomment the base class [Serializable] public class Point // : MarshalByRefObject { public Point (int x, int y) { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point constructor"); this.x = x; this.y = y; } public int X { get { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point x.get"); return this.x; } set { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point x.set"); this.x = value; } } public int Y { get { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point y.get"); return this.y; } set { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point y.set"); this.y = value; } } private int x; private int y; } // the shape class marshals by reference public class Shape : MarshalByRefObject { public Shape(int upperLeftX, int upperLeftY) { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Shape constructor"); upperLeft = new Point(upperLeftX, upperLeftY); } public Point GetUpperLeft( ) { return upperLeft; } public void ShowUpperLeft( ) { Console.WriteLine( "[{0}] Upper left: {1},{2}", System.AppDomain.CurrentDomain.FriendlyName, upperLeft.X, upperLeft.Y); } private Point upperLeft; } public class Tester { public static void Main( ) { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Entered Main"); // create the new app domain AppDomain ad2 = AppDomain.CreateDomain("Shape Domain"); // Assembly a = Assembly.LoadFrom("ProgCSharp.exe"); // Object theShape = a.CreateInstance("Shape"); // instantiate a Shape object ObjectHandle oh = ad2.CreateInstance( "ProgCSharp", "ProgCSharp.Shape", false, System.Reflection.BindingFlags.CreateInstance, null, new object[] {3, 5}, null, null, null ); Shape s1 = (Shape) oh.Unwrap( ); s1.ShowUpperLeft( ); // ask the object to display // get a local copy? proxy? Point localPoint = s1.GetUpperLeft( ); // assign new values localPoint.X = 500; localPoint.Y = 600; // display the value of the local Point object Console.WriteLine( "[{0}] localPoint: {1}, {2}", System.AppDomain.CurrentDomain.FriendlyName, localPoint.X, localPoint.Y); s1.ShowUpperLeft( ); // show the value once more } } } Here is the output: [EMAIL PROTECTED]:~$ mono ProgCSharp.exe [ProgCSharp.exe] Entered Main Unhandled Exception: System.MissingMethodException: Constructor not found. Server stack trace: in <0x0019a> System.Activator:CreateInstance (System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[]) in <0x00074> System.Activator:CreateInstance (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Security.Policy.Evidence) in <0x00055> System.AppDomain:CreateInstance (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Security.Policy.Evidence) in (unmanaged) (wrapper managed-to-native) System.Runtime.Remoting.RemotingServices:InternalExecute (System.Reflection.MonoMethod,object,object[],object[]&) in <0x4> (wrapper managed-to-native) System.Runtime.Remoting.RemotingServices:InternalExecute (System.Reflection.MonoMethod,object,object[],object[]&) in <0x00172> System.Runtime.Remoting.RemotingServices:InternalExecuteMessage (System.MarshalByRefObject,System.Runtime.Remoting.Messaging.IMethodCallMessage) Exception rethrown at [0]: in <0x00748> System.Runtime.Remoting.Pr