Well, I have main application installer where the core event handlers are 
registerd/resolved *when *the *container creates IEventBus *instance. The 
facility in my last post is from our search component. It may exists, it 
may not. So my best shot is to get an instance of that IEventBus within the 
facility and add the additional handlers. That facility is responsible for 
registering search event handlers, not the core.

On Wednesday, March 28, 2012 7:11:11 PM UTC+3, Simon wrote:
>
> Hi Mynkow
>
> Where is the event bus registration code you were referring in your 
> initial post in this facility? 
>
> If you want to resolve your Hanlders only once, why not you use a factory 
> method.
>
>             Converter<IKernel, IBus> CreateBus = kernel =>
>             {
>                 var hanlders =ResolveHandlers(kernel); //Resolve all handlers 
> in the kernel
>                 return new InProcessBus(hanlders);                
>             };
>
>             Kernel.Register(
>                 Component.For<IBus>().UsingFactoryMethod(CreateBus)           
>     
>                 );
>
>
> Put that in an installer. Just make sure you resolve the bus only once all 
> handlers are registered.
>
> Simon
>
> On Wed, Mar 28, 2012 at 2:56 AM, mynkow <> wrote:
>
>> Sure, nothing special there:
>>
>> public class SearchFacility : AbstractFacility
>>     {
>>         protected override void Init()
>>         {
>>             Converter<IKernel, SearchEngine> CreateSearchEngine = kernel =>
>>             {
>>                 var systemSettings = kernel.Resolve<ISystemSettings>();
>>                 
>> SearchEnvironment.SetIndexPath(systemSettings.SearchIndexLocation);
>>                 return new SearchEngine();
>>             };
>>  
>>             Kernel.Register(
>>                 
>> Component.For<SearchEngine>().UsingFactoryMethod(CreateSearchEngine),
>>                 
>> Component.For<IFluentSearch>().ImplementedBy<FluentSearch>().LifeStyle.Transient
>>                 );
>>         }
>>     }
>>
>>
>> On Thursday, March 22, 2012 8:02:04 PM UTC+2, Simon wrote:
>>
>>> Can you share your facility code?
>>>
>>> On Thu, Mar 22, 2012 at 9:22 AM, mynkow <> wrote:
>>>
>>>> Hello Simon
>>>>
>>>> I have a facility because the additional handlers are coming from a 
>>>> plugin.
>>>>
>>>> Is there any other way because I really do not want to resolve handlers 
>>>> on publish. The handlers are always the same and they are initialized 
>>>> upfront because this is a web application. For winforms is other story.
>>>>
>>>> 10x
>>>>
>>>>
>>>> On Thursday, March 22, 2012 3:03:36 PM UTC+2, Simon wrote:
>>>>
>>>>> Hi Mynkow,
>>>>>
>>>>> One way we do this is to have the InProcessEventBus have a dependency 
>>>>> on IKernel and resolve the dependencies when we publish to the bus.
>>>>>
>>>>> I'm not sure why you have a facility for this, facilities are use the 
>>>>> extend de container, registrations should be done with an Installer. 
>>>>>
>>>>> Simon
>>>>>
>>>>> On Thu, Mar 22, 2012 at 7:34 AM, mynkow wrote:
>>>>>
>>>>> Hi people,
>>>>>>
>>>>>> I have a web application with internal EventBus. The registration of 
>>>>>> the component is like this:
>>>>>>
>>>>>> Component.For<IEventBus>().**Imp**lementedBy<InProcessEventBu**s>(**).OnCreate((kernel,
>>>>>>  **eventBus) **=>
>>>>>>                 {
>>>>>>                     (eventBus ****as 
>>>>>> InProcessEventBus).**Register**AllHandlersInAssembly(**Assembly**.GetAssembly(typeof(IH**aveEvent**Handlers)),
>>>>>>  type => **kernel.**Resolve(type));
>>>>>>
>>>>>>                 }
>>>>>>
>>>>>> As you can see each handler is initialized as a singleton when the 
>>>>>> Event Bus is created. The IWindsorContainer instance is initialized in 
>>>>>> global.asax.
>>>>>>
>>>>>> Not the problem.
>>>>>> I have an external facility which registers additional event 
>>>>>> handlers. Right now I am doing it wrong. I resolve IEventBus instance 
>>>>>> within the facility and call the RegisterAllHandlersInAssem****bly(...) 
>>>>>> method.
>>>>>> The facility is called with all other component registrations in 
>>>>>> global.asax
>>>>>> Obviously this is wrong and I get an exception that the castle http 
>>>>>> module is not initialized because we are still in global.asax. Can you 
>>>>>> give 
>>>>>> me a hint how this should be done correctly? What concept am I missing 
>>>>>> here.
>>>>>>
>>>>>> Best regards
>>>>>>
>>>>>>
>>>>>>  -- 
>>>>>>
>>>>>
>>>>>  -- 
>>>>
>>>
>>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Castle Project Users" group.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msg/castle-project-users/-/km1mEfmksuIJ.
>>
>> 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.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/castle-project-users/-/gmqFlVa9J_4J.
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