[Ironruby-core] problem

Nathan Stott nrstott at gmail.com
Wed Mar 18 15:55:22 EDT 2009


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>

> 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>wrote:
>
>> Are you using resharper for your unit tests?
>>
>>
>>
>> 2009/3/18 Nathan Stott <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> 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>
>>>>
>>>> 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>
>>>>>
>>>>> 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>
>>>>>>
>>>>>>>  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] *On Behalf Of *Nathan Stott
>>>>>>> *Sent:* Wednesday, March 18, 2009 8:33 AM
>>>>>>> *To:* 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
>>>>>>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Ironruby-core mailing list
>>>>>> Ironruby-core at rubyforge.org
>>>>>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Ironruby-core mailing list
>>>>> Ironruby-core at rubyforge.org
>>>>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Ironruby-core mailing list
>>> Ironruby-core at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>>
>>>
>>
>
> _______________________________________________
> Ironruby-core mailing list
> 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/b4abb887/attachment-0001.html>


More information about the Ironruby-core mailing list