[Ironruby-core] problem
Jim Deville
jdeville at microsoft.com
Wed Mar 18 16:29:52 EDT 2009
We haven’t branched a users mailing list, so this is the perfect mailing list for questions like this.
JD
From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Nathan Stott
Sent: Wednesday, March 18, 2009 12:55 PM
To: ironruby-core at rubyforge.org
Subject: Re: [Ironruby-core] problem
Good call Ivan.
The LoadAssembly apparently was doing the trick!
Thanks for the help.
BTW, was this the right mailing list for this question? Is there a users mailing list?
2009/3/18 Ivan Porto Carrero <ivan at flanders.co.nz<mailto:ivan at flanders.co.nz>>
If so turn off shadow copy assemblies under Resharper -> options -> unit testing
On Wed, Mar 18, 2009 at 8:22 PM, Ivan Porto Carrero <ivan at flanders.co.nz<mailto:ivan at flanders.co.nz>> wrote:
Are you using resharper for your unit tests?
2009/3/18 Nathan Stott <nrstott at gmail.com<mailto:nrstott at gmail.com>>
I dont know if this helps, but this is the full output of the test:
ComponentLoaderRegisteringComponentContext.ShouldRegisterComponent : Failed
CT_INIT: Object
UPDATED: Object CreateInstanceSingleton affected=1 rules=0
UPDATED: Object CreateInstanceSingleton affected=1 rules=0
CT_INIT: File::Constants
CT_INIT: IO
CT_INIT: File
UPDATED: Object CreateInstanceSingleton affected=1 rules=0
MT_INIT: Kernel
MT_INIT: Object
MT_INIT: <anonymous>
MT_INIT: Module
MT_INIT: Class
MT_INIT: <anonymous>
UPDATED: Object CreateInstanceSingleton affected=5 rules=1
MT_INIT: <anonymous>
LOADER: Loading assembly 'Motorpool.Calendar.Web.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and type ''
MT_INIT: Symbol
MT_INIT: Enumerable
MT_INIT: Hash
MT_INIT: Microsoft::Scripting::Actions::TypeTracker
MT_INIT: Microsoft::Scripting::Actions::TypeGroup
System.InvalidOperationException: can't convert Castle::Core::ComponentModel into Castle::Core::ComponentModel
at CallSite.Target(Closure , CallSite , RubyMethodScope , Object , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute3<T0,T1,T2,TRet>(CallSite site, T0 arg0, T1 arg1, T2 arg2) in C:\git\ironruby\ndp\fx\src\Core\Microsoft\Scripting\Actions\UpdateDelegates.Generated.cs: line 509
at ℑℜ;component;;10;(Closure , Object , Proc , Object )
at CallSite.Target(Closure , CallSite , RubyScope , Object , Hash )
at System.Dynamic.UpdateDelegates.UpdateAndExecute3<T0,T1,T2,TRet>(CallSite site, T0 arg0, T1 arg1, T2 arg2) in C:\git\ironruby\ndp\fx\src\Core\Microsoft\Scripting\Actions\UpdateDelegates.Generated.cs: line 509
at ℑℜ;#;;0;(Closure , Scope , LanguageContext )
at Microsoft.Scripting.Runtime.LegacyScriptCode.Run() in C:\git\ironruby\Merlin\Main\Runtime\Microsoft.Scripting\Runtime\LegacyScriptCode.cs: line 43
at Microsoft.Scripting.SourceUnit.Execute() in C:\git\ironruby\Merlin\Main\Runtime\Microsoft.Scripting\SourceUnit.cs: line 239
at Microsoft.Scripting.Hosting.ScriptSource.Execute() in C:\git\ironruby\Merlin\Main\Runtime\Microsoft.Scripting\Hosting\ScriptSource.cs: line 138
at Motorpool.Calendar.Service.ComponentLoader.Load(IWindsorContainer container, TextReader reader) in ComponentLoader.cs: line 64
at Motorpool.Calendar.Web.Test.ComponentLoaderRegisteringComponentContext.ShouldRegisterComponent() in ComponentLoaderRegisteringComponentContext.cs: line 26
On Wed, Mar 18, 2009 at 1:55 PM, Nathan Stott <nrstott at gmail.com<mailto:nrstott at gmail.com>> wrote:
I tried that and no luck.
It doesn't seem that the assembly is not being loaded properly. I'm able to use methods on the objects fine in the script. However, it is that last call to the $container.Register(ComponentRegistration.new(model)) where for some reason it won't work.
ComponentRegistration.new() takes a ComponentModel. The error seems to indicate that it is receiving a ComponentModel even with the same namespace prefixes but somehow it's not able to use it.
2009/3/18 Ivan Porto Carrero <ivan at flanders.co.nz<mailto:ivan at flanders.co.nz>>
You can try using the LoadAssembly method on the runtime object
runtime.LoadAssembly(typeof(IWindsorContainer).Assembly);
that should require the assembly a little nicer
I think you can also use load_assembly 'Castle.Windsor'
http://github.com/casualjim/ninject-dynamic/blob/0b531d9e3ae46cc3e8549c9cfc078a8c27e5dda7/src/Ninject.Dynamic/RubyEngine.cs#L166
http://github.com/casualjim/ninject-dynamic/blob/0b531d9e3ae46cc3e8549c9cfc078a8c27e5dda7/src/Ninject.Dynamic/RubyEngine.cs#L142
http://github.com/casualjim/ninject-dynamic/blob/0b531d9e3ae46cc3e8549c9cfc078a8c27e5dda7/src/Ninject.Dynamic/RubyEngine.cs#L90
2009/3/18 Nathan Stott <nrstott at gmail.com<mailto:nrstott at gmail.com>>
I'm using the hosting API.
This is the entire method:
public void Load(IWindsorContainer container, TextReader reader)
{
var runtime = Ruby.CreateRuntime();
ScriptEngine engine = Ruby.GetEngine(runtime);
var ctx = Ruby.GetExecutionContext(runtime);
ctx.DefineReadOnlyGlobalVariable("container", container);
string header =
@"require 'Castle.Windsor'
require 'Castle.MicroKernel'
require 'Castle.Core'
ComponentRegistration = Castle::MicroKernel::Registration::ComponentRegistration
ComponentModel = Castle::Core::ComponentModel
Parameter = Castle::MicroKernel::Registration::Parameter
Component = Castle::MicroKernel::Registration::Component
def component(options)
throw :classIsRequired if !options.has_key?(:class)
klass = options[:class].to_clr_type
if options.has_key?(:service)
service = options[:service].to_clr_type
else
service = klass
end
if options.has_key?(:name)
name = options[:name]
else
name = klass.class.name.underscore.lowercase
end
model = ComponentModel.new(name, service, klass)
if options.has_key?(:parameters)
parameters = options[:parameters]
parameters.each do |p|
model.Parameters.Add(p.key, p.value)
end
end
$container.Register(ComponentRegistration.new(model))
end";
ScriptSource headerSource = engine.CreateScriptSourceFromString(header);
headerSource.Execute();
string containerScript = reader.ReadToEnd();
ScriptSource source = engine.CreateScriptSourceFromString(containerScript);
source.Execute();
}
}
2009/3/18 Tomas Matousek <Tomas.Matousek at microsoft.com<mailto:Tomas.Matousek at microsoft.com>>
How do you run this script? From command line (ir.exe script.rb) or do you use hosting API?
Tomas
From: ironruby-core-bounces at rubyforge.org<mailto:ironruby-core-bounces at rubyforge.org> [mailto:ironruby-core-bounces at rubyforge.org<mailto:ironruby-core-bounces at rubyforge.org>] On Behalf Of Nathan Stott
Sent: Wednesday, March 18, 2009 8:33 AM
To: ironruby-core at rubyforge.org<mailto:ironruby-core at rubyforge.org>
Subject: [Ironruby-core] problem
Hi all. I have a question that probably belongs on a users mailing list but I could not find one.
I get the following error when trying to use my IronRuby windsor registration script:
System.InvalidOperationException: can't convert Castle::Core::ComponentModel into Castle::Core::ComponentModel
I assume this has something to do with the fact that newing up an object in IronRuby isn't the same thing as newing it up in C#.
Any suggestions or guidance would be appreciated.
Here is the important IronRuby code:
require 'Castle.Windsor'
require 'Castle.MicroKernel'
require 'Castle.Core'
ComponentRegistration = Castle::MicroKernel::Registration::ComponentRegistration
ComponentModel = Castle::Core::ComponentModel
Parameter = Castle::MicroKernel::Registration::Parameter
Component = Castle::MicroKernel::Registration::Component
def component(options)
throw :classIsRequired if !options.has_key?(:class)
klass = options[:class].to_clr_type
if options.has_key?(:service)
service = options[:service].to_clr_type
else
service = klass
end
if options.has_key?(:name)
name = options[:name]
else
name = klass.class.name.underscore.lowercase
end
model = ComponentModel.new(name, service, klass)
if options.has_key?(:parameters)
parameters = options[:parameters]
parameters.each do |p|
model.Parameters.Add(p.key, p.value)
end
end
$container.Register(ComponentRegistration.new(model))
end
_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090318/cc26156e/attachment-0001.html>
More information about the Ironruby-core
mailing list