================================================================================================
release 2.5.2 ==================================================================================
================================================================================================
change - One of CreationContext constructors has now additional argument; parent CreationContext
	Method public IDisposable ParentResolutionContext(...) on CreationContext was removed
	Method protected CreationContext CreateCreationContext(...) has now additional argument;
	parent CreationContext

impact - low
fixability - medium
revision - 

description - To fix issue with false positive cycle detection (see issue IOC-238) changes had
	to be made to how parent creation context gets propagated in certain situation (when call
	to kernel.Resolve/ResolveAll is performed as part of resolution process, for example when
	CollectionResolver is being used).

fix - If you override CreateCreationContext method on DefaultKernel pass the additional argument
	as new constructor parameter to CreationContext.
	If you were using ParentResolutionContext method it should be fairly safe to remove the call
	if it was preceded by call to updated CreationContext constructor and the CreationContext is
	not used outside of local scope. In other cases it's best to consult Castle users group for
	advice on how to proceed.
================================================================================================
change - IReference<> interface has two new methods

impact - low
fixability - easy
revision - 

description - To make it possible to statically analyze dynamic dependencies provided by 
	the IReference interface two new methods were added:
			void Attach(DependencyModelCollection dependencies);
			void Detach(DependencyModelCollection dependencies);

fix - if you're providing dependencies on a component from the container call Attach so that 
	reference gets a chance to create and add DependencyModel for that dependency so that
	it can be statically analyzed by the container.
================================================================================================
change - Method IDependencyResolver.Initialize change signature

impact - low
fixability - easy
revision - 

description - To make it possible to use custom DependencyResolver inheriting from 
	DefaultDependencyResolver initialization of DefaultDependencyResolver was moved out of its
	constructor and to IDependencyResolver.Initialize method which now takes IKernel as its
	additional parameter

fix - if you're implementing the interface adjust signature of the overriding method to
	public void Initialize(IKernel kernel, DependencyDelegate dependencyDelegate)
	The method is called by the kernel at the end of its constructor.
================================================================================================
change - Changed visibility of members on AbstractFacility to protected and implementation of
	interface members to explicit.

impact - low
fixability - easy
revision - 

description - To make it less confusing to users when fluently configuring facilities (via 
	AddFacility<SomeFacility>(f => f.ConfigureSomething()) method) visibility of certain members
	of AbstractFacility class was changed. Public properties FacilityConfig and Kernel are now
	protected, and all methods from IFacility interface are implemented explicitly. Additionally
	protected Dispose method was introduced to allow inheriting classes to still be disposed.

fix - If you were using FacilityConfig and/or Kernel properties outside of inherited classes
	refactor your code accordingly not to do so. If you were overriding Dispose method change
	its signature from
	public override void Dispose() to
	protected override void Dispose()
================================================================================================
release 2.5.1 ==================================================================================
================================================================================================
change - ILazyComponentLoader.Load now accepts a third argument for additional arguments.

impact - medium
fixability - easy
revision - 

description - To allow maximum flexibility and usage with Resolve, any additional arguments
   are now passed to the lazy loader.
================================================================================================
change - LifecycleStepCollection class was removed. Instaed LifecycleConcernsCollection class
	was introduced. ILifecycleConcern has now two innerited interfaces for commission and
	decommission. LifecycleSteps property of ComponentModel was renamed to Lifecycle.
	LifecycleStepType type was removed.

impact - medium
fixability - easy
revision - 

description - To improve strongly typed nature and decrease probability of mistake and improve
	general usability of the type LifecycleStepCollection was removed. In it place similar type
	was introduced - LifecycleConcernsCollection. Instead of using untyped Objects and enums
	it works with two new interfaces : ICommissionConcern and IDecommissionConcern.

fix - have your lifecycle steps implement one of the new lifecycle interfaces. Use appropriate
	overload of Add/AddFirst to add them.
================================================================================================
change - Typed Factories will not implicitly pick default ITypedFactoryComponentSelector 
	registered in the container anymore

impact - low
fixability - easy
revision - 

description - In version 2.1 where ITypedFactoryComponentSelectors were introduced, when you had
	a selector registered in the container that selector would be implicitly picked for every
	factory you had. Since the behavior of a selector tends to be fine grained and targetet for
	a specific factories, this behavior was removed. You have to explicitly associate the selector
	with a factory (using .AsFactory(f => f.SelectUsing("MySelector")); or via xml configuration)
	to override selection behavior.

fix - using either fluent API .AsFactory(f => f.SelectUsing("MySelector")), or XML configuration
	selector="${MySelector}" specify the selector explicitly for each of your factories.
================================================================================================
change - ServiceSelector delegate (used in WithService.Select calls) changed signature

impact - low
fixability - easy
revision - 

description - To fix a bug which would occur if type implemented multiple closed version of base
	open generic interface the signature of the delegate was changed from
	public delegate IEnumerable<Type> ServiceSelector(Type type, Type baseType);
	to
	public delegate IEnumerable<Type> ServiceSelector(Type type, Type[] baseTypes);
	so that multiple base types are possible (they would be closed versions of the same open
	generic interface)

fix - depending on the scenario. You would either ignore it, or wrap your current method's body
	in foreach(var baseType in baseTypes)
================================================================================================
change - moved IWindsorInstaller to Castle.MicroKernel.Registration namespace

impact - very low
fixability - easy
revision - 

description -In order to improve developer experience when writing installers the interface
	was moved so that Component and AllTypes entry types for registration are already in scope.

fix - add using Castle.MicroKernel.Registration directive.
================================================================================================
change - Added two new overloads to ITypeConverter.PerformConversion

impact - very low
fixability - easy
revision - 

description - To reduce casting in the most common scenario where converted value is casted to
	the type it's been converted to, ITypeConverter.PerformConversion has now generic overloads
	for handling this case.

fix - If you're implementing ITypeConverter via AbstractTypeConverter you don't have to do
	anything as the base class will handle the conversion for you. Otherwise implement it like
	in AbstractTypeConverter.

================================================================================================
change - AddCustomComponent method were moved from IKernel to IKernelInternal interface

impact - very low
fixability - easy
revision - 

description - This method constitute internally used contract of kernel and is not intended
	for external usage. As such it was moved to internal interface to declutter public
	interface of IKernel.

fix - You should not have been using this method so it should not affect you in any way. If
	you did, cast the IKernel to IKernelInternal to invoke the method.

================================================================================================
change - IModelInterceptorsSelector.SelectInterceptors method changed its signature and how it
	is used.

impact - medium
fixability - medium
revision - 

description - To accomodate additional scenarios that were impossible (or hard to achieve
	with previous design the method now has additional parameter, an array of references to
	interceptors, which contains either default interceptors for the component, or interceptors
	selected by previous interceptors in line). Also, Windsor will now never call
	IModelInterceptorsSelector.SelectInterceptors without calling 
	IModelInterceptorsSelector.HasInterceptors before it, or when the latter returns false.

fix - When adjusting your implementation remember that model's interceptors are the default value
	passed as methods second parameter, so you don't need to merge them again manually (otherwise
	they'll be invoked twice).

================================================================================================
change - CreateComponentActivator, RaiseHandlerRegistered, RaiseHandlersChanged and
	 RegisterHandlerForwarding methods were moved from IKernel to IKernelInternal interface

impact - very low
fixability - easy
revision - 

description - These methods constitute internally used contract of kernel and are not intended
	for external usage. As such they were moved to internal interface to declutter public
	interface of IKernel.

fix - You should not have been using these methods so it should not affect you in any way. If
	you did, cast the IKernel to IKernelInternal to invoke the methods.

================================================================================================
change - IProxyHook interface was removed

impact - very low
fixability - easy
revision - 

description - Since MicroKernel was merged with Windsor and now depends on DynamicProxy directly
	there's no need to provide additional abstraction on top of IProxyGenerationHook.

fix - Make types that were implementing IProxyHook to implement IProxyGenerationHook. Change all
	usages of IProxyHook to IProxyGenerationHook.

================================================================================================
change -  AddInstallerConfiguration and GetComponents methods were added to IConfigurationStore.

impact - very low
fixability - easy
revision - 3bf716cc6fc218601dab92a6dd75fe269bcb63d0

description - To enable installers to be exposed via configuration the interface has been 
	extended by addition of the two methods.

fix - Implement the methods accordingly to your situation.

================================================================================================
change - Multiple types were moved between namespaces

impact - low
fixability - trivial
revision - 3bf716cc6fc218601dab92a6dd75fe269bcb63d0

description - To improve the internal structure several types were moved to other namespaces.

fix - When compilation error occurs adjust namespace imports as suggested by Visual Studio

================================================================================================
change - Assembly Castle.MicroKernel.dll was merged into Castle.Windsor.dll

impact - high
fixability - easy
revision - 730b202b0ed23a6b42258a6ffd6a3e63f89501fc

description - Since vast majority of users used Windsor, as opposed to bare MicroKernel it was
	decided it didn't make sense to maintain two containers. As result of that their assemblies
	were merged, as first step of integration between Windsor and MicroKernel.

fix - In your projects remove reference to Castle.MicroKernel.dll. If you weren't using Windsor
	add reference to Castle.Windsor.dll
	In all places where your were referencing types from Castle.MicroKernel.dll via string
	(like xml configuration when registering facilities, or <httpModules> section on your 
	web.config) update references from Castle.MicroKernel to Castle.Windsor.

================================================================================================
change - ComponentRegistration<S>.Startable public method has been removed.
	ComponentRegistration<S>.StartUsingMethod public method was moved to extension method.
	ComponentRegistration<S>.StopUsingMethod public method was moved to extension method.

impact - low
fixability - trivial
revision - 6710

description - StartUsingMethod/StopUsingMethod belong to StartableFacility and do not make sense
	as part of generic API. Startable method was superfluous.

fix - Remove calls to Startable(). Import namespace Castle.Facilities.Startable to use
	StartUsingMethod and StopUsingMethod as extension methods.

================================================================================================
change - DefaultProxyFactory.CreateProxyGenerationOptionsFrom protected method  and
	DefaultProxyFactory.CustomizeProxy protected virtual method have changed signature

impact - very low
fixability - easy
revision - 6691

description - the methods now also takes IKernel and CreationContext, to be used by IReferences
	to do resolution of components they reference

fix - pass required parameters to the methods.

================================================================================================
change - ProxyOption's properties changed types: 
	Selector, from IInterceptorSelector to IReference<IInterceptorSelector>
	Hook from IProxyHook to IReference<IProxyHook>
	MixIns from object[] to IEnumerable<IReference<object>>

impact - very low
fixability - easy
revision - 6691

description - the properties now use IReferences instead of live objects to allow for
	resolution of their values from the container, as required in case of usage from xml.

fix - wherever used, adjust types appropriately. To obtain actual objects, use Resolve method.
