Added a few overloads to AddFacility to be consistent with AddComponent.
[castle.git] / InversionOfControl / Changes.txt
blob3547c421c419f8ea3d11a083e90158db4affe631
1 RC 4\r
2 ====\r
3 \r
4 - Added generic AddFacility methods to kernel.\r
5 \r
6 - Added generalized configuration support to ComponentRegistration.\r
7 \r
8 - Added IWindsorInstaller interface to enhance Windsor component installation.\r
9 \r
10 - Added AllTypesOf registration stratgey to simplify custom registration\r
11   scenarios.\r
13 - Added IRegistration interface to allow alternate registration mechanisms.\r
15 - Fixed CORE-16 (Should be Facilities) \r
16  "The FactorySupportFacility does not create proxies if interceptors are present"\r
18 - Added support for list service overrides using the fluent registration interface.\r
19   Added support for specifying configuration parameters using the fluent interface to allow any complex\r
20   registration scenarios.\r
22 - Restructured the registration fluent interface to be a little more readable,\r
23   better support component registrations and prevent errors resulting from \r
24   forgetting to call ComponentRegistration.Register\r
26 - Fixed Facilities-97\r
27   "EventWiring Facility fails to create some components"\r
28   \r
29 - Added support for non-generic usage of fluent-interface.  Needed for dynamic registrations scenarios (Binsor)\r
30   Automatically register the component between consecutive AddComponentEx (Saves a few strokes).\r
32 - Initial version of MicroKernel/Windsor fluent interface IOC-99\r
34 - Applied patch from Jacob Lewallen improving the locking performance in the DefaultNamingSubsystem under high load.\r
36 - Applied Philippe Tremblay's patch fixing IOC-94 \r
37   "Copy LifeStyle from generic interface"\r
39 - Added support for copying interceptors defined on the geneirc interface handler.\r
41 - Fixed IOC-80\r
42   "StartableFacility erroneously tries to start a component before\r
43   RegisterCustomDependency can be called"\r
45 - Added ComponentModelConverter to utilize System.ComponentModel TypeConverters\r
46   Very useful for converting things like Fonts and Colors\r
48 - Updated DefaultComplexConverter to support interfaces and derived types\r
50 - Fixed IOC-96\r
51   "FactorySupport fails to create components if the factory instance is a proxy"\r
53 - Fixed IOC-93\r
54   "GenericListConverter does not handle service overrides properly" \r
56 - Fixed IOC-91\r
57   "ContextBoundObject's context is not bound when object is created by MicroKernel"\r
59 - Fixed build from IContainerAccessor change\r
61 - Applied Ron Grabowski's patch fixing IOC-89\r
62   "Make DefaultKernel implement IServiceProvider"\r
64 - Check for required Properties before determining the Handlers initial state\r
66 - Fixed IoC-87\r
67   "DefaultComplextConverter does not properly handle nested components"\r
69 - Applied Lee Henson's patch fixing IOC-86\r
70   "Additional generic AddComponent overloads"\r
72 - Applied Ido Samuelson patch fixing IOC-85\r
73   "IKernel to support generics to add/resolve components."\r
75 - Refactored proxy options support. Now you can use the attribute 'marshalByRefProxy' \r
76   on the external configuration, or the ComponentProxyBehaviorAttribute\r
78 - Fixed IOC-79\r
79   "Kernel.GetHandlers(Type) does not consider generic handlers when satisfying the type"\r
81 - Updated StartableFacilityTestCase to correctly demonstrate the facility and\r
82   added a unit test to demonstrate IOC-80\r
83  \r
84 - Applied Alex Henderson's patch that makes the ComponentModel available\r
85   to the ILifestyleManager\r
87 - Applied Adam Mills's patch fixing IOC-74\r
88   "BinaryComponentName VisitNode null check"\r
90 - Fixed IOC-67\r
91   "RemoveComponent needs to unwire handlers and remove them"\r
93 - Fixed IOC-59\r
94   "Child component unable to correctly resolve parent service added after the component"\r
96 - Fixed IOC-47\r
97   "Components created by FactoryActivator have their dependencies checked"\r
99 - Applied Marcus Widerberg's patch fixing FACILITIES-84\r
100   "FactorySupport - Allow parameters to factory method to be set at resolvetime"\r
102 - Applied Marcus Widerberg's patch fixing FACILITIES-82\r
103   "Programmatic configuration for FactorySupport"\r
105 - Reverted by Henry -> Apply patch from Sam Camp that fixes problems with Remoting Facility Sample and RecoverableComponent. \r
107 - Updated TypedFactoryFacility to not require a target instance\r
108   when proxying.\r
110 - Added Windsor proxy support to create proxies without targets.\r
112 - Removed relationship between ProxyOptions and ProxyGeneration options\r
113   and moved ProxyOptions into the MicroKernel.  ProxyGeneration options\r
114   are created from the ProxyOptions and will probably need to be updated\r
115   as facilities demand more proxy generation customizations.\r
117 - Added ProxyOptions to allow facilities to easily add proxy interfaces\r
118   without having to create custom proxy factories.  The ProxyOptions\r
119   are obtained via the ProxyUtil.\r
121 - Fixed IOC-65\r
122   "DictionaryConverter should use the alternate overload of the \r
123    PerformConversion method in order to support dictionaries that contain \r
124    custom types"\r
126 - Moved ProxyComponentInspector from Castle.MicroKernel to here and added\r
127   support to supply ProxyGenerationOptions on a ComponentModel basis.  This\r
128   provides the needed ability to provide proxy options in facilities.\r
130 - Fixed IOC-69 - DefaultDependencyResolver issue with Service Overrides.\r
132 - Added ComponentProxyBehaviorAttribute and ComponentProxyInspector \r
133   to control the creation of component proxies.\r
135 - Added eval support to configuration. Currently it only supports \r
136   BaseDirectory as a content to evaluate\r
138   <?eval $BaseDirectory ?>\r
140 - Added IEnvironmentInfo in an attempt to solve complex \r
141   configuration/environment issues.\r
143 - Fixing IOC-63 - source order of constructors should not matter\r
145 - Fixed IOC-62\r
146   "Interceptors don't work properly on generic components"\r
148 - Applied Norbert Wagner's patch fixing IOC-55\r
149   "Generic Type Converters: Set default entry types to generic arguments of property type"\r
151 - Applied Jeff Brown's patch fixing IOC-54\r
152   "Empty component parameter values cause runtime exception during component resolution."\r
154 - Applied patch by Bill Pierce that\r
156 -- Introduces the WebUserControlComponentActivator\r
158 -- Introduces the KeySearchNamingSubSystem\r
160 -- Allows you to associate a custom component activator using\r
161     1. componentActivatorType on component node\r
162     2. ComponentActivatorAttribute\r
164 -- Allows you to create and configure child containers \r
165    through the configuration, using\r
167   <configuration>\r
168     <containers>\r
169         <container name="child1">\r
170           <configuration>\r
171                 <facilities>\r
172                                         ...\r
173                 </facilities>\r
174           \r
175                 <components>\r
176                                         ...\r
177                 </components>\r
178                 \r
179             </configuration>\r
180         </container>\r
181     </containers>\r
182   </configuration>\r
184 - Applied AndyD's patch fixing IOC-52\r
185   "Remote access to generic components"\r
187 - Fixed IOC-45\r
188   "Proxying a component that has an interface that is extended from another interface throws an exception"\r
190 - Applied patch by Ernst Naezer fixing IOC-37\r
191   "Resolving with arguments in Windsor"\r
193 - Fixed IOC-43 \r
194   "Creation of an Attribute in the Kernel that allows one property to be ignored by the dependency builder"\r
195   \r
196   Introduced DoNotWireAttribute that marks a property and prevents it\r
197   from being considered by the container\r
199 - Changed Windsor to use DynamicProxy 2\r
201 - Applied patch by Adam Mills fixing IOC-42\r
202   "ResolveServices", new method added to IKernel\r
204 - Applied patch by Adam Mills fixing IOC-41\r
205   "Bug Fix BinaryTreeComponentName - Assumed Lesser nodes went to left"\r
207 - Applied patch by Adam Mills fixing IOC-40\r
208   "Provided an Implementation for BinaryTreeComponentName.Remove"\r
210 - Applied patch by Adam Mills fixing IOC-39\r
211   "Fix for Null Reference when accessing empty BinaryTreeComponentName"\r
213 - Fixed IOC-35 \r
214   "Add bootstrap section to configuration file"\r
216 - Fixed issue where KeyAlreadyAdded exception would be throw for \r
217   components accepting two parameters of the same type, without overrides\r
219 - Fixed IOC-36 \r
220   "Transient components with multliple constructors throw \r
221    unresolved dependency exceptions."\r
223   Removed best candidate reference, as the kernel is dynamic it should\r
224   not cache best constructors as components can be added or removed\r
225   at any time\r
226   \r
227   Removed Points from candidates, as in a multithreaded scenario\r
228   this would lead to failures\r
229   \r
231 - Fixed IOC-34 \r
232   "Cannot use types having their own base type as constructor argument"\r
234   See revision r2787\r
236 - IOC-32, Support generic collections. \r
237   Supported collections are: ICollection<T>, IList<T>, List<T>, IDictionary<K,V>, Dictionary<K,V>, IEnumerable<T> \r
239 RC 3\r
240 ====\r
241  \r
242 - Applied patch by William C. Pierce <wcpierce@gmail.com> adding PerWebRequestAttribute\r
244 - Added setter to ReleasePolicy property\r
246 - Applied Curtis Schlak's patch fixing IOC-30\r
247   "Add overload to Windsor AddComponent to specify the Lifestyle"\r
249 - Refactored AbstractHandler to use IDependencyResolver\r
251 - Dependencies can be resolved now in three levels:\r
253   * CreationContext (which now implements ISubDependencyResolver)\r
254   * IHandler (which now implements ISubDependencyResolver)\r
255   * IKernel which is the normal flow\r
257 - Implemented IoC-29 using a different approach\r
259 - Renamed IKernel.AddComponentWithProperties to AddComponentExtendedProperties.\r
260   The old method name misled the programmer about its purpose.\r
262 - Added a PerWebRequestLifestyleManager which creates at most one instance of\r
263   an object per web request.  To use it you must add the following http module\r
265   <httpModules>\r
266       ...\r
267           <add name="PerWebRequest" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleManager , Castle.MicroKernel,Version=0.0.1.7, Culture=neutral, PublicKeyToken=407dd0808d44fbdc"/>\r
269   <httpModules>\r
271   The strong name could be omitted if not in the GAC\r
273 - Added checks to handle cycles in dependencies graphs and avoid deadly Stack Overflow Exceptions.\r
275 - Fixed IOC-24: "Allow user to provide an attribute which will customize how to inspect properties (PropertiesDependenciesModelInspector)"\r
276   Now users can add an 'inspectionBehavior' attribute to the component node that defines\r
277   the inspection strategy. Possible values are\r
278   \r
279   - None: No properties inspection should happen\r
280   - All: All properties will be inspected and collected (on the class and on the superclasses). \r
281          This is the default behavior\r
282   - DeclaredOnly: Only properties specified on type are checked (superclasses will be ignored) \r
284 - Added overload to ITypeConvertor that accept the current node configuration as well as the type in CanHandleType()\r
286 - Change: Better error message when there's an exception \r
287   setting up properties\r
289 - Fixed IOC-25: Overrides on the configuration should be considered a non-optional dependency\r
291   This fix changes a little the MicroKernel behavior. Now if you specify an service override\r
292   through external configuration, it will be considered a _non-optional_ dependency\r
294 - Uri usage replaced by CustomUri which, differently than MS' Uri class, has the same\r
295   behavior on net-1.1, net-2.0 and mono\r
297 - EventWiring Facility: now when a publisher is requested, the subscribers\r
298   are automatically started. \r
299   \r
300   The side effects are: \r
301   \r
302   - when a subscriber is requested it won't be wired automatically. \r
303   - There no much sense in having a subscriber with a lifestyle other than singleton\r
304   \r
305   I'm still evaluating this idea. Sometimes wiring only when the subscriber is requested\r
306   might make sense, but supporting both approaches is kinda hard.\r
307   \r
309 - Applied patch by Alex Henderson <webmaster@bittercoder.com> adding\r
310     IWindsorContainer.RemoveChildContainer(IWindsorContainer childContainer)\r
311     and IKernel.RemoveChildKernel(IKernel kernel)\r
313 - Applied fix by Ahmed. Now defines can be used on properties nodes like\r
315   <properties>\r
316    <?if DEBUG?>\r
317     <item>x</item>\r
318    <?end?>\r
319   </properties>\r
321 - Now with DictionaryConverter you can specify the keyType and valueType on each entry (kudos to Ahmed)\r
323 - xmlinterpreter will throw an exception if a property is not defined but referenced\r
324 using #{propertyName} syntax.(Patch from Ahmed)\r
326 - XmlProcessor refactored from XmlInterpreter (kudos to Ahmed)\r
327   Now PI are also supported (don't forget to document this on the wiki)\r
329 - Support for nested nodes on the properties. (kudos to Ahmed)\r
330   Example:\r
332   <configuration>\r
333     <properties>\r
334        <MyComponentParams>\r
335          <user>Joe</user>\r
336          <pwd>Doe</pwd>\r
337        </MyComponentParams>\r
338      </properties>\r
339      <components id=”MyComponent”>\r
340        <parameters>#{ MyComponentParams }</parameters>\r
341      </components>\r
342   </configuration>\r
343   \r
344   Will result in \r
346      <components id=”MyComponent”>\r
347        <parameters>\r
348          <user>Joe</user>\r
349          <pwd>Doe</pwd>\r
350        </parameters>\r
351      </components>\r
353 - Type converter for kernel components. This allows a usage like this:\r
355   <component id="mycomp">\r
356   \r
357     <parameters>\r
358       <servicelist>\r
359         <list type="IMyService, MyAssembly">\r
360           <item>${keytocomponent1}</item>\r
361           <item>${keytocomponent2}</item>\r
362         </list>\r
363       </servicelist>\r
364     </parameters>\r
366 - Removed support for MethodMeta on ComponentModel. The design decision here \r
367   is to make the facilities interested on it to extend MethodMetaInspector\r
368   reading from a specific node.\r
370 RC 2\r
371 ====\r
373 - AsyncInitializationContainer introduced. Special container flavor that installs the\r
374   facilities and components using a background thread.\r
376 - Support for evaluation of expressions within the xml configuration (kudos to Ahmed)\r
377   The following "statements" are supported:\r
378   \r
379         <define flag="DEBUG" />\r
380         <undef flag="DEBUG"/>\r
381         \r
382         <if defined="DEBUG">\r
383                 component/facility nodes\r
384         </if>\r
385         \r
386         <choose>\r
387                 <when defined="DEBUG">\r
388                         <component id="debug"/>\r
389                 </when>\r
390                 <when defined="Qa">\r
391                         <component id="qa"/>\r
392                 </when>\r
393                 <when defined="Prod">\r
394                         <component id="prod"/>\r
395                 </when>\r
396                 <otherwise>\r
397                         <component id="default"/>\r
398                 </otherwise>\r
399         </choose>\r
401 - Startable facility: support to specify the attribute startable=true on the configuration\r
403 - Better error messages: now the components waiting for dependencies will recursively \r
404   report what they are waiting for.\r
406 - Support for custom lifestyle through configuration (kudos to Bawer Dagdeviren):\r
408   <component id="my.component"\r
409                    type="MyLib.MyComponent, MyLib"\r
410                    lifestyle="custom"\r
411                    customLifestyleType="MyLib.MyCustomLifestyle, MyLib" />\r
413 - Added Type converter for enums\r
415 - Support to associate configuration nodes to methods. Usage:\r
417         <component>\r
418                 <methods>\r
419                         <save />\r
420                         <save signature="System.String, mscorlib" />\r
421                         <save signature="System.String, mscorlib;System.Int32, mscorlib" />\r
422                 </methods>\r
423         </component>\r
425   Which is equivalent to\r
427         <component>\r
428                 <methods>\r
429                         <method name="save" />\r
430                         <method name="save" signature="System.String, mscorlib" />\r
431                         <method name="save" signature="System.String, mscorlib;System.Int32, mscorlib" />\r
432                 </methods>\r
433         </component> \r
435 - IResource introduced (FileResource, AssemblyResource, ConfigResource and UncResource)\r
436   which are accessible through Uris:\r
438   - FileResource:  \r
439     file://pathtofile \r
440     (For example: file://c:\mydir\file.txt)\r
442   - AssemblyResource:  \r
443     assembly://AssemblyName/ExtendingNamespace/filename \r
444     (For example: assembly://Castle.Windsor.Tests/Configuration2/include1.xml)\r
446   - ConfigResource:  \r
447     config://sectioname \r
448     (For example: config://castle will fetch the \r
449     <configuration><castle> entry in the configuration)\r
451   - UncResource:  \r
452     \\server\file \r
453     (For example: \\mysharedplace\myconfig.xml)\r
455 - IResource, IResourceFactory and IResourceSubSystem introduced\r
457 - Ability to use <properties> in configuration files. Usage\r
459         <properties>    \r
460                 <prop1>prop1 value</prop1>\r
461                 <prop2>prop2 value</prop2>\r
462         </properties>\r
464         <facilities>\r
465         \r
466                 <facility id="testidengine" >\r
467                         <item>#{prop1}</item>\r
468                 </facility>\r
470                 <facility id="testidengine2" >\r
471                         <item value="#{prop2}"/>\r
472                 </facility>\r
473         \r
474         </facilities>\r
477 - Ability to use <include> in configuration files. Usage\r
479   Main file:\r
481         <configuration>\r
483                 <include uri="file://include1.xml"/>\r
485         </configuration>\r
487   include1.xml:\r
489         <configuration>\r
491                 <components>\r
493                         <component id="testidcomponent1">\r
494                         </component>\r
496                         <component id="testidcomponent2">\r
497                         </component>\r
499                 </components>\r
501         </configuration>\r
504 Beta 3\r
505 ======\r
507 - Bug in dependency resolution (when chained) fixed\r
508 - Better message description on exceptions related to unresolved dependencies.\r
509 - Fixed bug in AddComponentWithProperties\r
511 Beta 2  - 10/apr/2005\r
512 ======\r
514 - Bug fixes\r
516 - Configuration object model separated into interpreters and sources\r
518 - AbstractFacility added\r
521 Beta 1  - 21/jan/2005\r
522 ======\r
524 - Changed: from #{} to ${} - way of referencing to another component\r
525   on the configuration.\r
527 - Added: support for dictionaries, lists and arrays on the configuration file.\r
529   <component>\r
530     <parameters>\r
531       <properties>\r
532         <dictionary>\r
533           <item key="mykey">value</item>\r
534         </dictionary>\r
535       </properties>\r
536     </parameters>\r
537   </component>\r
539 - Added: Component Graph (used by the Remove method and to dispose the components)\r
541 - Fixed: Remove method\r
543 - Fixed: Windsor: Proxy for components with (service != impl)\r