I tried this, but without any success :-) The eventhandler will not be
called while in
design mode . If i run the application everything is fine, even
without the
eventhandler.
Furthermore i don't want to load any assembly by hand. I use
the container to exactly avoid this. For testing purposes i tried this
way, but
i don't want to have a reference to Persistence.Broker.NHibernate
anywhere in
the application, beside the xml configuration.

I could cry...:-(

On May 18, 10:56 am, Jimmy Shimizu <[email protected]> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to