If you use Assembly.Load, Castle wont be able to resolve it unless you
create a custom AssemblyResolve-eventhandler, like this:
private static Assembly AssemblyResolveEventHandler( object sender,
ResolveEventArgs args )
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach ( var assembly in assemblies )
{
var assemblyName = assembly.GetName();
if ( assemblyName.Name == args.Name )
{
return assembly;
}
}
// Failed to find the desired assembly
return null;
}
And then you need to add this handler like this:
AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolveEventHandler;
[email protected] wrote:
>> If you have a project reference, it should work out of the box afaik.
>>
>
> That was my assumption too.The project UI.Contol wich contains
> the Objectsoure, has a reference to Persistence.Broker and a reference
> to Core.Infrastructure to access the container. Both have the property
> "copy local" enabled. But in Design Time my application is not
> running and VS copies nothing to the temp directory is uses.
> So then i started out to load the assemblies manually, but it all
> doesn't work. As far as i can see, i did all from Assembly.Load to
> Switching the load context...without any success, Castle is not
> able to resolve the correct type.
> Now i tried to remove the "service" tag from the configuration
>
> <component
> id="IPersistenceClient_NH"
> type="Persistence.Broker.NHibernate.PersistenceService,
> Persistence.Broker.NHibernate">
> </component>
>
> and added a reference to Persistence.Broker.NHibernate to the
> UI.Control project.
>
> IPersistenceService pPService = (IPersistenceService)
> CoreApplication.Application.ServiceManager.doResolveByKey
> ("IPersistenceClient_NH");
>
> This leads to the error: ComponentActivator: Could not instantiate
> Persistence.Broker.NHibernate
>
> Volker
>
> On 18 Mai, 09:54, Jimmy Shimizu <[email protected]> wrote:
>
>> I think you have come across the issue where manually loaded assemblies
>> ( Assembly.Load() ) can't be found automatically when you're trying to
>> access them.
>>
>> Please check this
>> post:http://blogs.msdn.com/suzcook/archive/2003/05/29/57143.aspx
>>
>> However, you shouldn't need to load your assemblies manually, just make
>> sure your Persistence.Broker.NHibernate-assembly is in your working
>> directory. If you've added it as a reference to your project, make sure
>> you enable "copy local" in the properties for that reference. If you
>> have a project reference, it should work out of the box afaik.
>>
>> VolkerR wrote:
>>
>>> Hi,
>>> i'm working on a application using Windows Forms. The app builds upon
>>> Castle and NHibernate. Because
>>> i don't want to have any references to NHibernate in the domain model
>>> or the view, i use a separate layer to
>>> access persistent objects. This is done through castle, with the
>>> following sample configuration:
>>> <configuration>
>>> <components>
>>> <component
>>> id="IPersistenceService"
>>> service="Persistence.Broker.Definition.IPersistenceService,
>>> Persistence.Broker"
>>> type="Persistence.Broker.NHibernate.PersistenceService,
>>> Persistence.Broker.NHibernate">
>>> </component>
>>> <component
>>> id="IRepository"
>>> service="Persistence.Broker.Definition.IRepository`1,
>>> Persistence.Broker"
>>> type="Persistence.Broker.NHibernate.NHibernateRepository`1,
>>> Persistence.Broker.NHibernate"
>>> lifestyle="transient">
>>> </component>
>>> </components>
>>> </configuration>
>>>
>>> So far so good. Everything works fine while running the application.
>>> The IPersistenceService provides
>>> access to metadata informations about the domain model. This
>>> information is needed for certain
>>> circumstances. One example is data binding. And here we come close to
>>> the problem. For example I want to write an ObjectSource - class,
>>> based on BindingSource. The ObjectSource should provide an
>>> implementation
>>> for the
>>>
>>> PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[]
>>> listAccessors)
>>>
>>> method that returns a PropertyDescriptorCollection based on the class,
>>> the ObjectSource is responsible for.
>>> To achieve this, the ObjectSource needs a property that specifies the
>>> IClassDefinition that holds the information about attributes etc. For
>>> this reason i build an UITypeEditor that simply displays a ListBox
>>> where the
>>> developer can select the needed IClassDefinition. The UITypeEditor
>>> needs access to the metadata information at design time and that
>>> means, it needs access to an instance of IPersistenceService. And here
>>> we are...i have to build a WindsorContainer at design time that wires
>>> up the services correctly. But this does not work. I can build the
>>> container and load the configuration XML, but Castle can not resolve
>>> the type for Persistence.Broker.NHibernate.PersistenceService. So my
>>> first thougth was, that the assemblies could not be find. This is
>>> surely true, because the VS FormDesigner stores files in an temp
>>> directory. So I tried to give the assemblies strong names to put them
>>> in the GAC. But the container still complains about not resolving the
>>> type Persistence.Broker.NHibernate.PersistenceService. The next try
>>> was to load the necessary assemblies by myself. There was no failure
>>> loading them at design time, but der Container still was not able to
>>> resolve then correct type. So I ended up, building an application
>>> object just for design time purposes, that uses an own application
>>> domain with the base directory pointing to the assemblies. I created
>>> the Container in the context of the new domain, but it still does not
>>> work.
>>> So now i have no further idea, how to solve this. I have to admit that
>>> i'm not so deep in all the .net internals rigth now, because i just
>>> came over from C++/Delphi. Maybe the solution is really simple, and i
>>> just can not see it :-)
>>> So, if you anyone could give me a hint, maybe just about how Castle
>>> resolves assemblies at all, it would be very grateful.
>>>
>>> Thanks for reading
>>> Volker
>>>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---