Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Intitial checkin of Windsor Bootstrapper. Leaks memory however

  • Loading branch information...
commit 3cfcbbf361a2fcee6017c6d4217d9603034ec59e 0 parents
chris.nicola authored
Showing with 64,015 additions and 0 deletions.
  1. +3 −0  .gitmodules
  2. +1 −0  dependencies/Nancy
  3. +49 −0 how_to_build.txt
  4. +21 −0 license.txt
  5. +133 −0 rakefile.rb
  6. +13 −0 readme.md
  7. +91 −0 src/Nancy.BootStrappers.Windsor.Tests/Nancy.BootStrappers.Windsor.Tests.csproj
  8. +145 −0 src/Nancy.BootStrappers.Windsor.Tests/WindsorNancyBootStrapperFixture.cs
  9. +7 −0 src/Nancy.BootStrappers.Windsor.Tests/packages.config
  10. +46 −0 src/Nancy.BootStrappers.Windsor.sln
  11. +87 −0 src/Nancy.BootStrappers.Windsor/HybridLifestyleManager.cs
  12. +74 −0 src/Nancy.BootStrappers.Windsor/Nancy.BootStrappers.Windsor.csproj
  13. +23 −0 src/Nancy.BootStrappers.Windsor/WindsorModuleKeyGenerator.cs
  14. +110 −0 src/Nancy.BootStrappers.Windsor/WindsorNancyAspNetBootstrapper.cs
  15. +5 −0 src/Nancy.BootStrappers.Windsor/packages.config
  16. BIN  src/packages/Castle.Core.2.5.2/Castle.Core.2.5.2.nupkg
  17. +57 −0 src/packages/Castle.Core.2.5.2/lib/ASL - Apache Software Foundation License.txt
  18. +55 −0 src/packages/Castle.Core.2.5.2/lib/BreakingChanges.txt
  19. +145 −0 src/packages/Castle.Core.2.5.2/lib/Changes.txt
  20. +80 −0 src/packages/Castle.Core.2.5.2/lib/Committers.txt
  21. BIN  src/packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.dll
  22. +4,927 −0 src/packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.xml
  23. BIN  src/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.dll
  24. +4,927 −0 src/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.xml
  25. BIN  src/packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.dll
  26. +4,443 −0 src/packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.xml
  27. BIN  src/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.dll
  28. +4,443 −0 src/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.xml
  29. +8 −0 src/packages/Castle.Core.2.5.2/lib/releaseNotes.txt
  30. BIN  src/packages/Castle.Windsor.2.5.3/Castle.Windsor.2.5.3.nupkg
  31. +57 −0 src/packages/Castle.Windsor.2.5.3/lib/ASL - Apache Software Foundation License.txt
  32. +303 −0 src/packages/Castle.Windsor.2.5.3/lib/BreakingChanges.txt
  33. +822 −0 src/packages/Castle.Windsor.2.5.3/lib/Changes.txt
  34. +80 −0 src/packages/Castle.Windsor.2.5.3/lib/Committers.txt
  35. BIN  src/packages/Castle.Windsor.2.5.3/lib/NET35/Castle.Windsor.dll
  36. BIN  src/packages/Castle.Windsor.2.5.3/lib/NET35/Castle.Windsor.pdb
  37. +7,741 −0 src/packages/Castle.Windsor.2.5.3/lib/NET35/Castle.Windsor.xml
  38. BIN  src/packages/Castle.Windsor.2.5.3/lib/NET40-Client/Castle.Windsor.dll
  39. BIN  src/packages/Castle.Windsor.2.5.3/lib/NET40-Client/Castle.Windsor.pdb
  40. +7,693 −0 src/packages/Castle.Windsor.2.5.3/lib/NET40-Client/Castle.Windsor.xml
  41. BIN  src/packages/Castle.Windsor.2.5.3/lib/NET40/Castle.Windsor.dll
  42. BIN  src/packages/Castle.Windsor.2.5.3/lib/NET40/Castle.Windsor.pdb
  43. +7,741 −0 src/packages/Castle.Windsor.2.5.3/lib/NET40/Castle.Windsor.xml
  44. BIN  src/packages/Castle.Windsor.2.5.3/lib/SL3/Castle.Windsor.dll
  45. BIN  src/packages/Castle.Windsor.2.5.3/lib/SL3/Castle.Windsor.pdb
  46. +7,027 −0 src/packages/Castle.Windsor.2.5.3/lib/SL3/Castle.Windsor.xml
  47. BIN  src/packages/Castle.Windsor.2.5.3/lib/SL4/Castle.Windsor.dll
  48. BIN  src/packages/Castle.Windsor.2.5.3/lib/SL4/Castle.Windsor.pdb
  49. +7,032 −0 src/packages/Castle.Windsor.2.5.3/lib/SL4/Castle.Windsor.xml
  50. +8 −0 src/packages/Castle.Windsor.2.5.3/lib/releaseNotes.txt
  51. BIN  src/packages/FakeItEasy.1.7.4166.27/FakeItEasy.1.7.4166.27.nupkg
  52. BIN  src/packages/FakeItEasy.1.7.4166.27/lib/NET40/FakeItEasy.dll
  53. +3,174 −0 src/packages/FakeItEasy.1.7.4166.27/lib/NET40/FakeItEasy.xml
  54. BIN  src/packages/FakeItEasy.1.7.4166.27/lib/SL4/FakeItEasy-SL.dll
  55. +5 −0 src/packages/repositories.config
  56. BIN  src/packages/xunit.1.8.0.1545/lib/xunit.dll
  57. +2,439 −0 src/packages/xunit.1.8.0.1545/lib/xunit.xml
  58. BIN  src/packages/xunit.1.8.0.1545/xunit.1.8.0.1545.nupkg
3  .gitmodules
@@ -0,0 +1,3 @@
+[submodule "dependencies/Nancy"]
+ path = dependencies/Nancy
+ url = https://github.com/NancyFx/Nancy
1  dependencies/Nancy
@@ -0,0 +1 @@
+Subproject commit 3f8507a6ac4f39cca5f65dfc40d8aa1a5f46428d
49 how_to_build.txt
@@ -0,0 +1,49 @@
+How to build Nancy
+==================
+
+*NOTE* These instructions are *only* for building with Rake - if you just want to build Nancy manually you can do so just by loading the solution into Visual Studio 2010 and pressing build :-)
+
+Prerequisites
+-------------
+
+1. Download and install Ruby 1.8.7+ from http://www.ruby-lang.org/en/downloads
+2. At the command prompt run the following to update RubyGems to the latest version:
+
+ gem update --system
+
+3. You will need the albacore gem, install this at the command prompt with:
+
+ gem install albacore
+
+If you have already installed albacore, please update to the lastest version (0.2.6+):
+
+ gem update albacore
+
+
+Building Nancy
+--------------
+
+1. At the command prompt, navigate to the Nancy root folder (should contain rakefile.rb)
+2. To run the default build (which will compile, test and package Nancy) type the following command:
+
+ rake
+
+In addition, you can see the full list of all the build tasks by running:
+
+ rake -T
+
+To run a particular task ('test' for example), use the following command:
+
+ rake test
+
+You can run multiple tasks by listing them ('test' then 'nuget' for example):
+
+ rake test nuget_package
+
+After the build has completed, there will be a new folder in the root called "build". It contains the following folders:
+
+* binaries -> All the Nancy assembilies and their dependencies
+* packages -> Zip file containing the binaries (other configurations might be added in the future)
+* nuget -> NuGet packages generated from this build
+* documentation -> Generated documentation (todo)
+* coverage -> Test coverage reports (todo)
21 license.txt
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2010 Andreas Håkansson, Steven Robbins and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
133 rakefile.rb
@@ -0,0 +1,133 @@
+require 'rubygems'
+require 'albacore'
+require 'rake/clean'
+require 'rexml/document'
+
+NANCY_VERSION = "0.7.1"
+OUTPUT = "build"
+CONFIGURATION = 'Release'
+SHARED_ASSEMBLY_INFO = 'dependencies/Nancy/src/SharedAssemblyInfo.cs'
+SOLUTION_FILE = 'src/Nancy.Bootstrappers.Windsor.sln'
+
+Albacore.configure do |config|
+ config.log_level = :verbose
+ config.msbuild.use :net4
+ config.xunit.command = "dependencies/Nancy/tools/xunit/xunit.console.clr4.x86.exe"
+end
+
+desc "Compiles solution and runs unit tests"
+task :default => [:clean, :version, :compile, :xunit, :publish, :package]
+
+#Add the folders that should be cleaned as part of the clean task
+CLEAN.include(OUTPUT)
+CLEAN.include(FileList["src/**/#{CONFIGURATION}"])
+
+desc "Update shared assemblyinfo file for the build"
+assemblyinfo :version => [:clean] do |asm|
+ asm.version = NANCY_VERSION
+ asm.company_name = "Nancy"
+ asm.product_name = "Nancy.Bootstrappers.Windsor"
+ asm.title = "Nancy.Bootstrappers.Windsor"
+ asm.description = "A Windsor Bootstrapper for the Nancy web framework"
+ asm.copyright = "Copyright (C) Andreas Hakansson, Steven Robbins and contributors"
+ asm.output_file = SHARED_ASSEMBLY_INFO
+end
+
+desc "Compile solution file"
+msbuild :compile => [:version] do |msb|
+ msb.properties :configuration => CONFIGURATION
+ msb.targets :Clean, :Build
+ msb.solution = SOLUTION_FILE
+end
+
+desc "Gathers output files and copies them to the output folder"
+task :publish => [:compile] do
+ Dir.mkdir(OUTPUT)
+ Dir.mkdir("#{OUTPUT}/binaries")
+
+ FileUtils.cp_r FileList["src/**/#{CONFIGURATION}/*.dll", "src/**/#{CONFIGURATION}/*.pdb"].exclude(/obj\//).exclude(/.Tests/), "#{OUTPUT}/binaries"
+end
+
+desc "Executes xUnit tests"
+xunit :xunit => [:compile] do |xunit|
+ tests = FileList["src/**/#{CONFIGURATION}/Nancy.Bootstrappers.Windsor.Tests.dll"].exclude(/obj\//)
+ xunit.assemblies = tests
+end
+
+desc "Zips up the built binaries for easy distribution"
+zip :package => [:publish] do |zip|
+ Dir.mkdir("#{OUTPUT}/packages")
+
+ zip.directories_to_zip "#{OUTPUT}/binaries"
+ zip.output_file = "Nancy.Bootstrappers.Windsor-Latest.zip"
+ zip.output_path = "#{OUTPUT}/packages"
+end
+
+desc "Generates NuGet packages for each project that contains a nuspec"
+task :nuget_package => [:publish] do
+ Dir.mkdir("#{OUTPUT}/nuget")
+ nuspecs = FileList["src/nancy.bootstrappers.windsor/*.nuspec"]
+ root = File.dirname(__FILE__)
+
+ # Copy all project *.nuspec to nuget build folder before editing
+ FileUtils.cp_r nuspecs, "#{OUTPUT}/nuget"
+ nuspecs = FileList["#{OUTPUT}/nuget/nancy.bootstrappers.windsor.nuspec"]
+
+ # Update the copied *.nuspec files to correct version numbers and other common values
+ nuspecs.each do |nuspec|
+ update_xml nuspec do |xml|
+ # Override the version number in the nuspec file with the one from this rake file (set above)
+ xml.root.elements["metadata/version"].text = NANCY_VERSION
+
+ # Override the Nancy dependencies to match this version
+ nancy_dependencies = xml.root.elements["metadata/dependencies/dependency[contains(@id,'Nancy')]"]
+ nancy_dependencies.attributes["version"] = "[#{NANCY_VERSION}]" unless nancy_dependencies.nil?
+
+ # Override common values
+ xml.root.elements["metadata/authors"].text = "Andreas Hakansson, Steven Robbins and contributors"
+ xml.root.elements["metadata/summary"].text = "Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications."
+ xml.root.elements["metadata/licenseUrl"].text = "https://github.com/NancyFx/Nancy.Bootstrappers.Windsor/blob/master/license.txt"
+ xml.root.elements["metadata/projectUrl"].text = "http://nancyfx.org"
+ end
+ end
+
+ # Generate the NuGet packages from the newly edited nuspec fileiles
+ nuspecs.each do |nuspec|
+ nuget = NuGetPack.new
+ nuget.command = "dependencies/Nancy/tools/nuget/nuget.exe"
+ nuget.nuspec = "\"" + root + '/' + nuspec + "\""
+ nuget.output = "#{OUTPUT}/nuget"
+ nuget.parameters = "-Symbols", "-BasePath \"#{root}\"" #using base_folder throws as there are two options that begin with b in nuget 1.4
+ nuget.execute
+ end
+end
+
+desc "Pushes the nuget packages in the nuget folder up to the nuget gallary and symbolsource.org. Also publishes the packages into the feeds."
+task :nuget_publish do
+ nupkgs = FileList["#{OUTPUT}/nuget/*#{NANCY_VERSION}.nupkg"]
+ nupkgs.each do |nupkg|
+ puts "Pushing #{nupkg}"
+ nuget_push = NuGetPush.new
+ nuget_push.command = "dependencies/Nancy/tools/nuget/nuget.exe"
+ nuget_push.package = "\"" + nupkg + "\""
+ nuget_push.create_only = false
+ nuget_push.execute
+ end
+end
+
+def update_xml(xml_path)
+ #Open up the xml file
+ xml_file = File.new(xml_path)
+ xml = REXML::Document.new xml_file
+
+ #Allow caller to make the changes
+ yield xml
+
+ xml_file.close
+
+ #Save the changes
+ xml_file = File.open(xml_path, "w")
+ formatter = REXML::Formatters::Default.new(5)
+ formatter.write(xml, xml_file)
+ xml_file.close
+end
13 readme.md
@@ -0,0 +1,13 @@
+## Contributors
+
+* [Andreas Håkansson](http://github.com/thecodejunkie)
+* [Chris Nicola](http://github.com/lucisferre)
+* [Steven Robbins](http://github.com/grumpydev)
+
+## Copyright
+
+Copyright © 2010 Andreas Håkansson, Steven Robbins and contributors
+
+## License
+
+Nancy.Bootstrappers.Windsor is licensed under [MIT](http://www.opensource.org/licenses/mit-license.php "Read more about the MIT license form"). Refer to license.txt for more information.
91 src/Nancy.BootStrappers.Windsor.Tests/Nancy.BootStrappers.Windsor.Tests.csproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{C490CBDA-78BA-42BF-98F4-CCA06D09532D}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Nancy.BootStrappers.Windsor.Tests</RootNamespace>
+ <AssemblyName>Nancy.BootStrappers.Windsor.Tests</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Castle.Core">
+ <HintPath>..\packages\Castle.Core.2.5.2\lib\NET35\Castle.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Castle.Windsor">
+ <HintPath>..\packages\Castle.Windsor.2.5.3\lib\NET40\Castle.Windsor.dll</HintPath>
+ </Reference>
+ <Reference Include="FakeItEasy">
+ <HintPath>..\packages\FakeItEasy.1.7.4166.27\lib\NET40\FakeItEasy.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Web" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ <Reference Include="xunit">
+ <HintPath>..\packages\xunit.1.8.0.1545\lib\xunit.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\..\dependencies\Nancy\src\Nancy.Tests\Fakes\FakeNancyModuleWithBasePath.cs">
+ <Link>Fakes\FakeNancyModuleWithBasePath.cs</Link>
+ </Compile>
+ <Compile Include="..\..\dependencies\Nancy\src\Nancy.Tests\Fakes\FakeNancyModuleWithDependency.cs">
+ <Link>Fakes\FakeNancyModuleWithDependency.cs</Link>
+ </Compile>
+ <Compile Include="..\..\dependencies\Nancy\src\Nancy.Tests\ShouldExtensions.cs">
+ <Link>ShouldExtensions.cs</Link>
+ </Compile>
+ <Compile Include="WindsorNancyBootStrapperFixture.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Nancy.BootStrappers.Windsor\Nancy.Bootstrappers.Windsor.csproj">
+ <Project>{F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}</Project>
+ <Name>Nancy.Bootstrappers.Windsor</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\dependencies\Nancy\src\Nancy\Nancy.csproj">
+ <Project>{34576216-0DCA-4B0F-A0DC-9075E75A676F}</Project>
+ <Name>Nancy</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
145 src/Nancy.BootStrappers.Windsor.Tests/WindsorNancyBootStrapperFixture.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Diagnostics;
+
+namespace Nancy.Bootstrappers.Windsor.Tests
+{
+ using System.Linq;
+ using Castle.MicroKernel.Registration;
+ using Castle.Windsor;
+ using Nancy.Bootstrappers.Windsor;
+ using Nancy.Routing;
+ using Nancy.Bootstrapper;
+ using Nancy.Tests;
+ using Nancy.Tests.Fakes;
+ using Xunit;
+
+ public class FakeWindsorNancyAspNetBootstrapper : WindsorNancyAspNetBootstrapper
+ {
+ public bool ApplicationContainerConfigured { get; set; }
+
+ public IWindsorContainer Container
+ {
+ get { return this.ApplicationContainer; }
+ }
+
+ public bool RequestContainerConfigured { get; set; }
+
+ protected override void InitialiseInternal(IWindsorContainer container)
+ {
+ base.InitialiseInternal(container);
+
+ RequestContainerConfigured = true;
+
+ container.Register(
+ Component.For<Foo, IFoo>(),
+ Component.For<Dependency, IDependency>()
+ );
+ }
+
+ protected override IWindsorContainer CreateRequestContainer()
+ {
+ this.RequestContainerConfigured = true;
+ return base.CreateRequestContainer();
+ }
+
+ protected override void ConfigureApplicationContainer(IWindsorContainer existingContainer)
+ {
+ ApplicationContainerConfigured = true;
+ base.ConfigureApplicationContainer(existingContainer);
+ }
+ }
+
+ public class WindsorNancyBootstrapperFixture
+ {
+ private readonly FakeWindsorNancyAspNetBootstrapper bootstrapper;
+
+ public WindsorNancyBootstrapperFixture()
+ {
+ this.bootstrapper = new FakeWindsorNancyAspNetBootstrapper();
+ this.bootstrapper.Initialise();
+ }
+
+ [Fact]
+ public void GetEngine_ReturnsEngine()
+ {
+ var result = this.bootstrapper.GetEngine();
+
+ result.ShouldNotBeNull();
+ result.ShouldBeOfType<INancyEngine>();
+ }
+
+ [Fact]
+ public void GetAllModules_Returns_As_MultiInstance()
+ {
+ this.bootstrapper.GetEngine();
+ var context = new NancyContext();
+ var output1 = this.bootstrapper.GetAllModules(context).Where(nm => nm.GetType() == typeof(FakeNancyModuleWithBasePath)).FirstOrDefault();
+ var output2 = this.bootstrapper.GetAllModules(context).Where(nm => nm.GetType() == typeof(FakeNancyModuleWithBasePath)).FirstOrDefault();
+
+ output1.ShouldNotBeNull();
+ output2.ShouldNotBeNull();
+ output1.ShouldNotBeSameAs(output2);
+ }
+
+ [Fact]
+ public void GetModuleByKey_Returns_As_MultiInstance()
+ {
+ this.bootstrapper.GetEngine();
+ var context = new NancyContext();
+ var output1 = this.bootstrapper.GetModuleByKey(typeof(FakeNancyModuleWithBasePath).FullName, context);
+ var output2 = this.bootstrapper.GetModuleByKey(typeof(FakeNancyModuleWithBasePath).FullName, context);
+
+ output1.ShouldNotBeNull();
+ output2.ShouldNotBeNull();
+ output1.ShouldNotBeSameAs(output2);
+ }
+
+ [Fact]
+ public void GetEngine_ConfigureApplicationContainer_Should_Be_Called()
+ {
+ this.bootstrapper.GetEngine();
+
+ this.bootstrapper.ApplicationContainerConfigured.ShouldBeTrue();
+ }
+
+ [Fact]
+ public void GetEngine_Defaults_Registered_In_Container()
+ {
+ this.bootstrapper.GetEngine();
+
+ this.bootstrapper.Container.Resolve<INancyModuleCatalog>();
+ this.bootstrapper.Container.Resolve<IRouteResolver>();
+ this.bootstrapper.Container.Resolve<INancyEngine>();
+ this.bootstrapper.Container.Resolve<IModuleKeyGenerator>();
+ this.bootstrapper.Container.Resolve<IRouteCache>();
+ this.bootstrapper.Container.Resolve<IRouteCacheProvider>();
+ }
+
+ [Fact]
+ public void Getting_modules_will_not_return_multiple_instances_of_non_dependency_modules()
+ {
+ this.bootstrapper.GetEngine();
+
+ var nancyModules = this.bootstrapper.GetAllModules(new NancyContext());
+ var modLookup = nancyModules.ToLookup(x => x.GetType());
+
+ var types = nancyModules.Select(x => x.GetType()).Distinct();
+
+ foreach (var type in types) modLookup[type].Count().ShouldEqual(1);
+ }
+
+ [Fact]
+ public void Test_memory_leak()
+ {
+ var engine = this.bootstrapper.GetEngine();
+ engine.HandleRequest(new Request("GET", "/fake/route/with/some/parts", "http"));
+ Console.WriteLine("Start - " + GC.GetTotalMemory(false).ToString("#,###,##0") + " Bytes");
+ for (int i = 0; i < 1000000; i++)
+ {
+ engine = this.bootstrapper.GetEngine();
+ engine.HandleRequest(new Request("GET", "/fake/route/with/some/parts", "http"));
+ }
+ Console.WriteLine("End - " + GC.GetTotalMemory(false).ToString("#,###,##0") + " Bytes");
+ }
+ }
+}
7 src/Nancy.BootStrappers.Windsor.Tests/packages.config
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Castle.Core" version="2.5.2" />
+ <package id="FakeItEasy" version="1.7.4166.27" />
+ <package id="xunit" version="1.8.0.1545" />
+ <package id="Castle.Windsor" version="2.5.3" />
+</packages>
46 src/Nancy.BootStrappers.Windsor.sln
@@ -0,0 +1,46 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nancy.BootStrappers.Windsor", "Nancy.BootStrappers.Windsor\Nancy.BootStrappers.Windsor.csproj", "{F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nancy.BootStrappers.Windsor.Tests", "Nancy.BootStrappers.Windsor.Tests\Nancy.BootStrappers.Windsor.Tests.csproj", "{C490CBDA-78BA-42BF-98F4-CCA06D09532D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nancy", "..\dependencies\Nancy\src\Nancy\Nancy.csproj", "{34576216-0DCA-4B0F-A0DC-9075E75A676F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ MonoDebug|Any CPU = MonoDebug|Any CPU
+ MonoRelease|Any CPU = MonoRelease|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.MonoDebug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.MonoDebug|Any CPU.Build.0 = Debug|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.MonoRelease|Any CPU.ActiveCfg = Release|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.MonoRelease|Any CPU.Build.0 = Release|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.MonoDebug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.MonoDebug|Any CPU.Build.0 = Debug|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.MonoRelease|Any CPU.ActiveCfg = Release|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.MonoRelease|Any CPU.Build.0 = Release|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C490CBDA-78BA-42BF-98F4-CCA06D09532D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
87 src/Nancy.BootStrappers.Windsor/HybridLifestyleManager.cs
@@ -0,0 +1,87 @@
+#region license
+// Copyright 2004-2010 Castle Project - http://www.castleproject.org/
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#endregion
+
+using System.Reflection;
+using System.Web;
+using Castle.Core;
+using Castle.MicroKernel;
+using Castle.MicroKernel.Context;
+using Castle.MicroKernel.Lifestyle;
+
+namespace Nancy.BootStrappers.Windsor
+{
+ /// <summary>
+ /// Abstract hybrid lifestyle manager, with two underlying lifestyles
+ /// </summary>
+ /// <typeparam name="M1">Primary lifestyle manager</typeparam>
+ /// <typeparam name="M2">Secondary lifestyle manager</typeparam>
+ public abstract class HybridLifestyleManager<M1, M2> : AbstractLifestyleManager
+ where M1 : ILifestyleManager, new()
+ where M2 : ILifestyleManager, new()
+ {
+ public HybridLifestyleManager() { }
+ protected readonly M1 lifestyle1 = new M1();
+ protected readonly M2 lifestyle2 = new M2();
+
+ public override void Dispose()
+ {
+ lifestyle1.Dispose();
+ lifestyle2.Dispose();
+ }
+
+ public override void Init(IComponentActivator componentActivator, IKernel kernel, ComponentModel model)
+ {
+ lifestyle1.Init(componentActivator, kernel, model);
+ lifestyle2.Init(componentActivator, kernel, model);
+ }
+
+ public override bool Release(object instance)
+ {
+ var r1 = lifestyle1.Release(instance);
+ var r2 = lifestyle2.Release(instance);
+ return r1 || r2;
+ }
+
+ public abstract override object Resolve(CreationContext context);
+ }
+
+ /// <summary>
+ /// Hybrid lifestyle manager where the main lifestyle is <see cref = "PerWebRequestLifestyleManager" />
+ /// </summary>
+ /// <typeparam name = "T">Secondary lifestyle</typeparam>
+ public class HybridPerWebRequestLifestyleManager<T> : HybridLifestyleManager<PerWebRequestLifestyleManager, T>
+ where T : ILifestyleManager, new()
+ {
+
+ // TODO make this public in Windsor
+ private static readonly PropertyInfo PerWebRequestLifestyleModuleInitialized = typeof(PerWebRequestLifestyleModule).GetProperty("Initialized", BindingFlags.Static | BindingFlags.NonPublic);
+
+ private static bool IsPerWebRequestLifestyleModuleInitialized
+ {
+ get
+ {
+ return (bool)PerWebRequestLifestyleModuleInitialized.GetValue(null, null);
+ }
+ }
+
+ public override object Resolve(CreationContext context)
+ {
+ if (HttpContext.Current != null && IsPerWebRequestLifestyleModuleInitialized)
+ return lifestyle1.Resolve(context);
+ return lifestyle2.Resolve(context);
+ }
+ }
+}
74 src/Nancy.BootStrappers.Windsor/Nancy.BootStrappers.Windsor.csproj
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{F4F084BE-E3B3-4BC3-925A-5EB4FC7FA46B}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Nancy.BootStrappers.Windsor</RootNamespace>
+ <AssemblyName>Nancy.BootStrappers.Windsor</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Castle.Core">
+ <HintPath>..\packages\Castle.Core.2.5.2\lib\NET35\Castle.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Castle.Windsor">
+ <HintPath>..\packages\Castle.Windsor.2.5.3\lib\NET40\Castle.Windsor.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Web" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\..\dependencies\Nancy\src\SharedAssemblyInfo.cs">
+ <Link>Properties\SharedAssemblyInfo.cs</Link>
+ </Compile>
+ <Compile Include="HybridLifestyleManager.cs" />
+ <Compile Include="WindsorModuleKeyGenerator.cs" />
+ <Compile Include="WindsorNancyAspNetBootstrapper.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\dependencies\Nancy\src\Nancy\Nancy.csproj">
+ <Project>{34576216-0DCA-4B0F-A0DC-9075E75A676F}</Project>
+ <Name>Nancy</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
23 src/Nancy.BootStrappers.Windsor/WindsorModuleKeyGenerator.cs
@@ -0,0 +1,23 @@
+using System;
+using Nancy.Bootstrapper;
+
+namespace Nancy.Bootstrappers.Windsor
+{
+ /// <summary>
+ /// Windsor ModuleKey generator - handles Castle proxy classes correctly
+ /// </summary>
+ public class WindsorModuleKeyGenerator : IModuleKeyGenerator
+ {
+ /// <summary>
+ /// Returns a string key for the given type
+ /// </summary>
+ /// <param name = "moduleType">NancyModule type</param>
+ /// <returns>String key</returns>
+ public string GetKeyForModuleType(Type moduleType)
+ {
+ return moduleType.FullName.StartsWith("Castle.Proxies")
+ ? moduleType.BaseType.FullName
+ : moduleType.FullName;
+ }
+ }
+}
110 src/Nancy.BootStrappers.Windsor/WindsorNancyAspNetBootstrapper.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Castle.MicroKernel.Lifestyle;
+using Castle.MicroKernel.Registration;
+using Castle.MicroKernel.Resolvers.SpecializedResolvers;
+using Castle.Windsor;
+using Nancy.BootStrappers.Windsor;
+using Nancy.Bootstrapper;
+using Nancy.Routing;
+
+namespace Nancy.Bootstrappers.Windsor
+{
+ /// <summary>
+ /// This does not create a child container because in Windsor this leads to memory leaks. Instead be sure to use
+ /// PerWebRequest lifestyle for anything that needs to be disposed after each request.
+ /// </summary>
+ public abstract class WindsorNancyAspNetBootstrapper : NancyBootstrapperWithRequestContainerBase<IWindsorContainer>
+ {
+ protected override IEnumerable<IStartup> GetStartupTasks()
+ {
+ return this.ApplicationContainer.ResolveAll<IStartup>();
+ }
+
+ protected override INancyEngine GetEngineInternal()
+ {
+ return this.ApplicationContainer.Resolve<INancyEngine>();
+ }
+
+ protected override IModuleKeyGenerator GetModuleKeyGenerator() {
+ return this.ApplicationContainer.Resolve<IModuleKeyGenerator>();
+ }
+
+ protected override IWindsorContainer GetApplicationContainer()
+ {
+ if (this.ApplicationContainer != null) return this.ApplicationContainer;
+ var container = new WindsorContainer();
+ container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel, true));
+ return container;
+ }
+
+ protected override IWindsorContainer CreateRequestContainer()
+ {
+ var child = new WindsorContainer();
+ this.ApplicationContainer.AddChildContainer(child);
+ return child;
+ }
+
+ protected override void RegisterRequestContainerModules(IWindsorContainer container,
+ IEnumerable<ModuleRegistration> moduleRegistrationTypes)
+ {
+ IEnumerable<ComponentRegistration<object>> components = moduleRegistrationTypes
+ .Select(r => Component.For(typeof (NancyModule))
+ .ImplementedBy(r.ModuleType)
+ .Named(r.ModuleKey)
+ .LifeStyle.Transient);
+ container.Register(components.ToArray());
+ }
+
+ protected override IEnumerable<NancyModule> GetAllModules(IWindsorContainer container)
+ {
+ return container.ResolveAll<NancyModule>();
+ }
+
+ protected override NancyModule GetModuleByKey(IWindsorContainer container, string moduleKey)
+ {
+ return container.Resolve<NancyModule>(moduleKey);
+ }
+
+ protected override void RegisterBootstrapperTypes(IWindsorContainer applicationContainer)
+ {
+ applicationContainer.Register(Component.For<INancyModuleCatalog>().Instance(this));
+ }
+
+ protected override void RegisterTypes(IWindsorContainer container, IEnumerable<TypeRegistration> typeRegistrations)
+ {
+ IEnumerable<ComponentRegistration<object>> components = typeRegistrations
+ .Where(t => t.RegistrationType != typeof (IModuleKeyGenerator))
+ .Select(r => Component.For(r.RegistrationType)
+ .ImplementedBy(r.ImplementationType));
+ container.Register(components.ToArray());
+ container.Register(Component.For<IModuleKeyGenerator>().ImplementedBy<WindsorModuleKeyGenerator>());
+ container.Register(Component.For<Func<IRouteCache>>().UsingFactoryMethod(ctx =>
+ {
+ return (Func<IRouteCache>) (() =>
+ {
+ return ctx.Resolve<IRouteCache>();
+ });
+ }));
+ }
+
+ protected override void RegisterCollectionTypes(IWindsorContainer container, IEnumerable<CollectionTypeRegistration> collectionTypeRegistrations)
+ {
+ foreach (CollectionTypeRegistration collectionTypeRegistration in collectionTypeRegistrations)
+ {
+ foreach (Type implementationType in collectionTypeRegistration.ImplementationTypes)
+ container.Register(Component.For(collectionTypeRegistration.RegistrationType).ImplementedBy(implementationType));
+ }
+ }
+
+ protected override void RegisterInstances(IWindsorContainer container, IEnumerable<InstanceRegistration> instanceRegistrations)
+ {
+ foreach (InstanceRegistration instanceRegistration in instanceRegistrations)
+ {
+ container.Register(
+ Component.For(instanceRegistration.RegistrationType).Instance(instanceRegistration.Implementation));
+ }
+ }
+ }
+}
5 src/Nancy.BootStrappers.Windsor/packages.config
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Castle.Core" version="2.5.2" />
+ <package id="Castle.Windsor" version="2.5.3" />
+</packages>
BIN  src/packages/Castle.Core.2.5.2/Castle.Core.2.5.2.nupkg
Binary file not shown
57 src/packages/Castle.Core.2.5.2/lib/ASL - Apache Software Foundation License.txt
@@ -0,0 +1,57 @@
+Apache License, Version 2.0
+
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
55 src/packages/Castle.Core.2.5.2/lib/BreakingChanges.txt
@@ -0,0 +1,55 @@
+================================================================================================
+change - Removed WebLogger and WebLoggerFactory
+
+impact - low
+fixability - medium
+revision -
+
+description - To minimize management overhead the classes were removed so that only single
+ Client Profile version of Castle.Core can be distributed.
+
+fix - You can use NLog or Log4Net web logger integration, or reuse implementation of existing
+ web logger and use it as a custom logger.
+
+================================================================================================
+change - Removed obsolete overload of ProxyGenerator.CreateClassProxy
+
+impact - low
+fixability - trivial
+revision -
+
+description - Deprecated overload of ProxyGenerator.CreateClassProxy was removed to keep the
+ method consistent with other methods and to remove confusion
+
+fix - whenever removed overload was used, use one of the other overloads.
+
+================================================================================================
+change - IProxyGenerationHook.NonVirtualMemberNotification method was renamed
+
+impact - high
+fixability - easy
+revision -
+
+description - to accommodate class proxies with target method NonVirtualMemberNotification on
+ IProxyGenerationHook type was renamed to more accurate NonProxyableMemberNotification
+ since for class proxies with target not just methods but also fields and other member that
+ break the abstraction will be passed to this method.
+
+fix - whenever NonVirtualMemberNotification is used/implemented change the method name to
+ NonProxyableMemberNotification. Implementors should also accommodate possibility that not
+ only MethodInfos will be passed as method's second parameter.
+
+================================================================================================
+change - DynamicProxy will now allow to intercept members of System.Object
+
+impact - very low
+fixability - easy
+revision -
+
+description - to allow scenarios like mocking of System.Object members, DynamicProxy will not
+ disallow proxying of these methods anymore. AllMethodsHook (default IProxyGenerationHook)
+ will still filter them out though.
+
+fix - whenever custom IProxyGenerationHook is used, user should account for System.Object's
+ members being now passed to ShouldInterceptMethod and NonVirtualMemberNotification methods
+ and if neccessary update the code to handle them appropriately.
145 src/packages/Castle.Core.2.5.2/lib/Changes.txt
@@ -0,0 +1,145 @@
+2.5.2 (2010-11-15)
+==================
+- fixed DYNPROXY-150 - Finalizer should not be proxied
+- implemented DYNPROXY-149 - Make AllMethodsHook members virtual so it can be used as a base class
+- fixed DYNPROXY-147 - Can't crete class proxies with two non-public methods having same argument types but different return type
+- fixed DYNPROXY-145 Unable to proxy System.Threading.SynchronizationContext (.NET 4.0)
+- fixed DYNPROXY-144 - params argument not supported in constructor
+- fixed DYNPROXY-143 - Permit call to reach "non-proxied" methods of inherited interfaces
+- implemented DYNPROXY-139 - Better error message
+- fixed DYNPROXY-133 - Debug assertion in ClassProxyInstanceContributor fails when proxying ISerializable with an explicit implementation of GetObjectData
+- fixed CORE-32 - Determining if permission is granted via PermissionUtil does not work in .NET 4
+- applied patch by Alwin Meijs - ExtendedLog4netFactory can be configured with a stream from for example an embedded log4net xml config
+- Upgraded NLog to 2.0 Beta 1
+- Added DefaultXmlSerializer to bridge XPathAdapter with standard Xml Serialization.
+- XPathAdapter for DictionaryAdapter added IXPathSerializer to provide hooks for custom serialization.
+
+2.5.1 (2010-09-21)
+==================
+- Interface proxy with target Interface now accepts null as a valid target value (which can be replaced at a later stage).
+- DictionaryAdapter behavior overrides are now ordered with all other behaviors
+- BREAKING CHANGE: removed web logger so that by default Castle.Core works in .NET 4 client profile
+- added paramter to ModuleScope disabling usage of signed modules. This is to workaround issue DYNPROXY-134. Also a descriptive exception message is being thrown now when the issue is detected.
+- Added IDictionaryBehaviorBuilder to allow grouping behaviors
+- Added GenericDictionaryAdapter to simplify generic value sources
+- fixed issue DYNPROXY-138 - Error message missing space
+- fixed false positive where DynamicProxy would not let you proxy interface with target interface when target object was a COM object.
+- fixed ReflectionBasedDictionaryAdapter when using indexed properties
+
+2.5.0 (2010-08-21)
+==================
+- DynamicProxy will now not replicate non-public attribute types
+- Applied patch from Kenneth Siewers M�ller which adds parameterless constructor to DefaultSmtpSender implementation, to be able to configure the inner SmtpClient from the application configuration file (system.net.smtp).
+- added support for .NET 4 and Silverlight 4, updated solution to VisualStudio 2010
+- Removed obsolete overload of CreateClassProxy
+- Added class proxy with taget
+- Added ability to intercept explicitly implemented generic interface methods on class proxy.
+- DynamicProxy does not disallow intercepting members of System.Object anymore. AllMethodsHook will still filter them out though.
+- Added ability to intercept explicitly implemented interface members on class proxy. Does not support generic members.
+- Merged DynamicProxy into Core binary
+- fixed DYNPROXY-ISSUE-132 - "MetaProperty equals implementation incorrect"
+- Fixed bug in DiagnosticsLoggerTestCase, where when running as non-admin, the teardown will throw SecurityException (contributed by maxild)
+- Split IoC specific classes into Castle.Windsor project
+- Merged logging services solution
+- Merged DynamicProxy project
+
+1.2.0 (2010-01-11)
+==================
+
+- Added IEmailSender interface and its default implementation
+
+1.2.0 beta (2009-12-04)
+==================
+
+- BREAKING CHANGE - added ChangeProxyTarget method to IChangeProxyTarget interface
+- added docs to IChangeProxyTarget methods
+- Fixed DYNPROXY-ISSUE-108 - Obtaining replicated custom attributes on proxy may fail when property setter throws exception on default value
+- Moved custom attribute replication from CustomAttributeUtil to new interface - IAttributeDisassembler
+- Exposed IAttributeDisassembler via ProxyGenerationOptions, so that users can plug their implementation for some convoluted scenarios. (for Silverlight)
+- Moved IInterceptorSelector from Dynamic Proxy to Core (IOC-ISSUE-156)
+
+1.1.0 (2009-05-04)
+==================
+
+- Applied Eric Hauser's patch fixing CORE-ISSUE-22
+ "Support for environment variables in resource URI"
+
+- Applied Gauthier Segay's patch fixing CORE-ISSUE-20
+ "Castle.Core.Tests won't build via nant because it use TraceContext without referencing System.Web.dll"
+
+- Added simple interface to ComponentModel to make optional properties required.
+
+- Applied Mark's -- <mwatts42@gmail.com> -- patch that changes
+ the Core to support being compiled for Silverlight 2
+
+- Applied Louis DeJardin's patch adding TraceLogger as a new logger implementation
+
+- Applied Chris Bilson's patch fixing CORE-15
+ "WebLogger Throws When Logging Outside of an HttpContext"
+
+Release Candidate 3
+===================
+
+- Added IServiceProviderEx which extends IServiceProvider
+
+- Added Pair<T,S> class.
+
+- Applied Bill Pierce's patch fixing CORE-9
+ "Allow CastleComponent Attribute to Specify Lifestyle in Constructor"
+
+- Added UseSingleInterfaceProxy to CompomentModel to control the proxying
+ behavior while maintaining backward compatibility.
+ Added the corresponding ComponentProxyBehaviorAttribute.
+
+- Made NullLogger and IExtnededLogger
+
+- Enabled a new format on ILogger interface, with 6 overloads for each method:
+ Debug(string)
+ Debug(string, Exception)
+ Debug(string, params object[])
+ DebugFormat(string, params object[])
+ DebugFormat(Exception, string, params object[])
+ DebugFormat(IFormatProvider, string, params object[])
+ DebugFormat(IFormatProvider, Exception, string, params object[])
+
+ The "FatalError" overloads where marked as [Obsolete], replaced by "Fatal" and "FatalFormat".
+
+0.0.1.0
+=======
+
+- Included IProxyTargetAccessor
+
+- Removed IMethodInterceptor and IMethodInvocation, that have been replaced
+ by IInterceptor and IInvocation
+
+- Added FindByPropertyInfo to PropertySetCollection
+
+- Made the DependencyModel.IsOptional property writable
+
+- Applied Curtis Schlak's patch fixing IOC-27
+ "assembly resource format only works for resources where the assemblies name and default namespace are the same."
+
+ Quoting:
+
+ "I chose to preserve backwards compatibility by implementing the code in the
+ reverse order as suggested by the reporter. Given the following URI for a resource:
+
+ assembly://my.cool.assembly/context/moo/file.xml
+
+ It will initially look for an embedded resource with the manifest name of
+ "my.cool.assembly.context.moo.file.xml" in the loaded assembly my.cool.assembly.dll.
+ If it does not find it, then it looks for the embedded resource with the manifest name
+ of "context.moo.file.xml".
+
+- IServiceEnabledComponent Introduced to be used across the project as
+ a standard way to have access to common services, for example, logger factories
+
+- Added missing log factories
+
+- Refactor StreamLogger and DiagnosticLogger to be more consistent behavior-wise
+
+- Refactored WebLogger to extend LevelFilteredLogger (removed duplication)
+
+- Refactored LoggerLevel order
+
+- Project started
80 src/packages/Castle.Core.2.5.2/lib/Committers.txt
@@ -0,0 +1,80 @@
+This file names who's behind the Castle Team. You can find more about us at http://www.castleproject.org/community/team.html
+
+Committers
+==========
+(ordered by the date when joined the project)
+
+- hammett/Hamilton Verissimo
+- Henry Conceição
+- Kevin Williams
+- Craig Neuwirt
+- Gilles Bayon
+- Andrew Hallock
+- Jason Nelson
+- Dru Sellers
+- John Morales
+- CobraLord
+- Dan
+- Tatham Oddie
+- Fabio David Batista
+- Chad Humphries
+- Ayende Rahien
+- G. Richard Bellamy
+- Roelof Blom
+- Ahmed Ghandour
+- Josh Robb
+- Ernst Naezer
+- Marc-Andre Cournoyer
+- Fabian Schmied
+- Dave Godfrey
+- Markus Zywitza
+- Lee Henson
+- Ken Egozi
+- Chris Ortman
+- Jonathon Rossi
+- Tuna Toksöz
+- Krzysztof Kozmic
+- Mauricio Scheffer
+- John Simons
+
+Managers
+========
+
+ Patch Manager
+ -------------
+
+ - Josh Robb
+
+ Documentation Manager
+ ---------------------
+
+ -
+
+
+PMC Members
+===========
+(ordered by the date when joined the PMC)
+
+- hammett/Hamilton Verissimo (Chair)
+- Henry Conceição
+- Kevin Williams
+- Craig Neuwirt
+- Gilles Bayon
+- Chad Humphries
+- Ayende Rahien
+- Fabio David Batista
+- Roelof Blom
+- Josh Robb
+- Jonathon Rossi
+
+Emeritus
+========
+(no longer active committers)
+
+- Gilles Bayon
+- Dan
+- Andrew Hallock
+- John Morales
+- CobraLord
+- Tatham Oddie
+- Ahmed Ghandour
BIN  src/packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.dll
Binary file not shown
4,927 src/packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.xml
4,927 additions, 0 deletions not shown
BIN  src/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.dll
Binary file not shown
4,927 src/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.xml
4,927 additions, 0 deletions not shown
BIN  src/packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.dll
Binary file not shown
4,443 src/packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.xml
4,443 additions, 0 deletions not shown
BIN  src/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.dll
Binary file not shown
4,443 src/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.xml
4,443 additions, 0 deletions not shown
8 src/packages/Castle.Core.2.5.2/lib/releaseNotes.txt
@@ -0,0 +1,8 @@
+You can find full list of changes in changes.txt, list of breaking changes in breakingchanges.txt (there are no known breaking changes between 2.5.1 and 2.5.2 release).
+
+Issue tracker: - http://issues.castleproject.org/dashboard
+Documentation (work in progress):
+Dictionary Adapter - http://stw.castleproject.org/Tools.Castle-DictionaryAdapter.ashx
+DynamicProxy - http://stw.castleproject.org/Tools.DynamicProxy.ashx
+Discusssion group: - http://groups.google.com/group/castle-project-users
+StackOverflow tags: - castle-dynamicproxy, castle-dictionaryadapter, castle
BIN  src/packages/Castle.Windsor.2.5.3/Castle.Windsor.2.5.3.nupkg
Binary file not shown
57 src/packages/Castle.Windsor.2.5.3/lib/ASL - Apache Software Foundation License.txt
@@ -0,0 +1,57 @@
+Apache License, Version 2.0
+
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
303 src/packages/Castle.Windsor.2.5.3/lib/BreakingChanges.txt
@@ -0,0 +1,303 @@
+================================================================================================
+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.
822 src/packages/Castle.Windsor.2.5.3/lib/Changes.txt
@@ -0,0 +1,822 @@
+2.5.3 (2011-02-02)
+==================
+- fixed IOC-266 - Dependency of a generic service is not disposed in Windsor 2.5.x
+- fixed IOC-261 - Disposing of typed-factory can throw argument null exception
+- fixed IOC-254 - Optional non-primitive .ctor parameters don't work
+- fixed IOC-250 - Dispose not being called on open generic registrations
+
+2.5.2 (2010-11-15)
+==================
+- implemented IOC-243 - Unseal the InterceptorAttribute class
+- fixed IOC-239 - ArrayResolver attempts to instantiate an unresolvable array dependency
+- fixed IOC-238 - Resolving Composite depending on a Decorator may fire up cycle detection fuse
+- fixed IOC-237 - Castle Windsor : Possible bug with Startable Facility and �decorator pattern� dependencies
+- fixed IOC-236 - Typed Factory Facility causes memory leak because it keeps a reference after releasing object in list 'trackedComponents'
+- fixed IOC-235 - TypedFactoryFacility with inherited interfaces throws an exception
+- fixed IOC-234 - StackOverflow causing inability to use debugger view when there are components with dependency cycles in the container
+- fixed IOC-232 - Exception when using delegate based factories can throw when registered implicitly and used as dependencies of generic component
+- fixed IOC-231 - Boilerplate methods on facilities should be hidden from IntelliSense when configuring a facility
+- fixed IOC-230 - Missing Mixins/InterceptorSelectors/ProxyGenerationHooks and TypedFactoryFacility's component selectors are not detected until resolution time
+- fixed IOC-229 - Qurerying for subsystem is case sensitive
+- implemented IOC-228 - Chicken and egg problem when trying to inherit from DefaultDependencyResolver
+- fixed IOC-227 - ResolveAll fails for generic forwarded registrations
+- fixed IOC-224 - Obsolete message on some members of old obsolete API don't compile
+- fixed IOC-223 - Fluent registration registers components with System.Object service when no BasedOn discriminator is provided
+
+2.5.1 (2010-09-21)
+==================
+- added "Potential lifestyle mismatches" debugger view item, that will detect and list situations where Singleton depends on Transient or PerWebRequest component (which is usually a bug)
+- fixed issue where forwarding main type would create additional, superfluous handler
+- WebLogger/WebLoggerFactory was removed from Castle.Core so all references to that are removed from Windsor as well
+- obseleted UseSingleProxyInterface in preference over IProxyGenerationHook
+- fixed IOC-220 Composite pattern with CollectionResolver should be properly supported without throwing "cycle detected" exception
+- fixed IOC-218 Enable methods that take arguments as anonymous objects in Silverlight version. This works in SL, but requires [assembly: InternalsVisibleTo(Castle.Core.Internal.InternalsVisible.ToCastleCore)]
+- fixed IOC-217 Enable ISupportInitialize support as lifecyclecle concern in Silverlight 4
+- implemented IOC-216 Make it possible to specify service overrides in DependsOn, either via Property, or ServiceOverride entry class
+- implemented IOC-215 Hide obsolete members from IntelliSense (in basic view. By default in VB they won't be showed, but will in C# :( )
+- fixed IOC-214 Missing bracket in obsolete warning text
+- implemented IOC-212 Add ability to make IProxyGenerationHooks and IInterceptoSelectors IOnBehalfAware
+- fixed IOC-211 Resolve doesn't work with constructor's ref argument
+- fixed IOC-210 Typed Factory Facility treats constructor dependency as non-optional if resolved as a TFF component
+- fixed IOC-209 Bug in constructor selection when resolving - Windsor would pick unresolvable constructor
+- reverted back (to the way it was in v2.1) conditional registration of helper components used by TypedFactoryFacility as it would cause issues when used with nested containers (see the new test and thread "Typed Factories in sub Container (differences between 2.5 and 2.1)" on users group)
+- added framework information the assembly was built for to the AssemblyTitle attribute
+- improved how late bound types are displayed in debugger
+- fixed bug where count of potentially misconfigured components would show invalid value
+- added raw handler access to default component view in debugger
+- changed how status message is displayed for potentially misconfigured components so that an actual visualizer for strings can be used to view this potentially long piece of text
+
+2.5.0 (2010-08-21)
+==================
+- debugger view support has been extracted to a separate subsystem (IContainerDebuggerExtensionHost) and can be extended by users code via IContainerDebuggerExtension and IComponentDebuggerExtension
+- calling IHandler.TryStart will no longer silently ignore all the exceptions.
+- added CollectionResolver which is a more general version of ArrayResolver and ListResolver and supports in addition ICollection<Foo> and IEnumerable<Foo>
+- fixed issue where dependencies would not be cleaned up when component creation failed
+- fixed issue where startable component would be created twice when property dependency could not be resolved
+- passing arguments to ILazyComponentLoader (see breakingchanges.txt)
+- fixed bug that caused exception when proxied component and it's proxied property dependency shared interceptor
+
+2.5.0 beta2 (2010-07-21)
+==================
+- added support for selecting components based on custom attributes and their properties. See Component.HasAttribute<T>() methods
+- added WithService.DefaultInterface() to fluent API.IT matches Foo to IFoo, SuperFooExtended to IFoo and IFooExtended etc
+- added support for CastleComponentAttribute in fluent Api. Also added helper filter method Component.IsCastleComponent
+- added ability to specify interceptors selector as a service, not just as instance
+- added ability to specify proxy hook in fluent API:
+- indexers on IKernel are now obsolete.
+- added WithAppConfig() method to logging facility to point to loging configuration in AppDomain's config file (web.config or app.config)
+- Restructured lifecycle concerns - introduced ICommissionConcern and IDecommissionConcern and favors them over old enum driven style.
+- Fixed how contextual arguments are handled. Null is no longer considered a valid value (That would cause an exception later on, now it's ignored).
+- Changed method DeferredStart on StartableFacility. It now does not take a bool parameter. A DeferredTryStart() method was introduced instead.
+
+2.5.0 beta1 (2010-07-05)
+==================
+- Typed Factories will not implicitly pick default ITypedFactoryComponentSelector registered in the container anymore
+- Obsoleted all the AddComponent* methods in favor of using Installers and fluent registration API
+- ServiceSelector delegate (used in WithService.Select calls) changed signature to fix a bug: http://3.ly/eP5Q
+- moved IWindsorInstaller to Castle.MicroKernel.Registration namespace
+- typed factories will now obey container release policy, that is if the container does not track the component, so won't the factory.
+- added helper methods to fluently configure logging facility using: container.AddFacility<LoggingFacility>( f = > f.Fluent().Magic().Here() );
+- added overload for UsingFactoryMethod which exposees ComponentModel of component to the factory
+- added generic overloads for ITypeConverter.PerformConversion to reduce casting.
+- it is now possible to call WithService.Foo().WithService.Bar() and both services will be used. Also more methods were added: WithService.Self() and WithService.AllInterfaces()
+- added simple debugger visualizer to help diagnosing misconfigured components.
+- added optimized mode to StartableFacility for Single-call-to-Install scenario that won't start anything before the end of Install (at which point the container is assumed to be completely configured and all components should be there) and it will throw if it can't resolve and start the component.
+- added OptimizeDependencyResolution around calls to Install
+- Component.IsInNamespace and its sister methods have now overload that let you include components from subnamespaces as well.
+- added ability to load assemblies from designated directory (with fair bit of optional filtering using new AssemblyFilter class). It works in three places:
+ - AllTypes.FromAssemblyInDirectory() - picks assemblies for registration
+ - FromAssembly.InDirectory() - installs installers from assemblies in the directory
+ - <install directory="" /> - installs installers from assemblies in directory via XML
+- TypedFactoryFacility - added ability to configure factory inline: Component.For<IFooFactory>().AsFactory(f => f.SelectedWith("selectorKey"))
+- Changed IModelInterceptorSelector's signature and behavior (see breakingChanges.txt for details)
+- removed IProxyHook interface (see breakingchanges.txt)
+- added support for specifying typed factory component selectors on a per-factory basis
+- added support for using services as mixins
+- added autogenerated delegate-based factories. Taking dependency on Func<IFoo> and calling the delegate will return IFoo from the container
+- implemented IOC-ISSUE-203 - Add to fluent API scanning assemblies for IWindsorInstallers and installing them
+- added fluent API for EventWiringFacility
+- added ability to specify assemblies that will be scanned for types when shorthened type name is using via XML using the following syntax:
+ <using assembly="Assembly name or path to file.dll" />
+- added ability to specify installers (IWindsorInstaller) via XML using either of the following:
+ <installers>
+ <install type="Castle.Windsor.Tests.Installers.CustomerInstaller"/>
+ <install assembly="Castle.Windsor.Tests"/>
+ </installers>
+ installers must be public and have default constructor.
+- Xml config does not require assembly qualified type name any more - specifying just type name, or typename+namespace should be enough. Works only for types in already loaded assemblies.
+- ResolveAll will now resolve components that are not in Valid state when inline/dynamic arguments are provided
+- TypedFactoryFacility: TypedFactoryComponent will now fallback to resolving by type if no component with designated name can be found
+- fixed issue with per-web-request components not being released properly in some cases
+- fixed IOC-ISSUE-199 - NamingPartsSubSystem broken when RegisterHandlerForwarding is used
+- TypedFactoryFacility: added ability to resolve multiple components
+- TypedFactoryFacility: added ability to put custom resolving logic
+- fixed another case of IoC-168 where a component with two constructors of different parameter length couldn't be resolved when the fewer parameter constructor was not satisfied
+- If and Unless functions on fluent registration API are now cumulative - it is legal to call them multiple times and all conditions will be checked. This is a minor breaking change from previous behavior where last call would win.
+- added typed arguments (specified by type rather than by name).
+ It works for:
+ - call site (Resolve with Dictionary, specifying System.Type as value of key. A helper class 'Arguments' should be used for this.)
+ - DynamicParameters - there's an extension method Insert that should make using it nicer
+ - fluent Api (DependsOn(Property.ForKey<string>().Eq("typed"))
+- added 'Insert' extension method on IDictionary, specifically so simplify usage in DynamicParameters method and similar situations. It behaves like IDictionary's indexer setter
+- added 'Arguments' class to carry inline arguments (typed or named) for components. It is recommended to use this class rather than Hashtable or Dictionary<>
+- added strongly typed overloads for StartUsingMethod and StopUsingMethod from startable facility's registration API. It is now possible to call .StartUsingMethod(x => x.Start).StopUsingMethod(x => x.Stop)
+- moved StartUsingMethod/StopUsingMethod to extension methods in StartableFacility's namespace. Startable() method was removed as superfluous.
+- changed the UsingFactoryMethod (and UsingFactory) methods in fluent registration API to not rely on FactorySupportFacility. They now work even if facility is not used.
+- fixed IOC-ISSUE-190 - "Resolve with argumentsAsAnonymousType overload is now case sensitive".
+ This fixed a regression bug introduced in v2.1, and brings the behavior back to what it was in v2.0.
+- added support for specifying interceptorsSelector, proxyHook and mixins from config (see new tests for example). This also means some small impact breaking changes:
+ - DefaultProxyFactory.CreateProxyGenerationOptionsFrom protected method has changed signature - it now also takes IKernel and CreationContext, to be used by IReferences to do resolve (see below)
+ - DefaultProxyFactory.CustomizeProxy protected virtual method has changed signature, for the same reason as above
+ - ProxyOption's properties changed types:
+ Selector, from IInterceptorSelector to IReference<IInterceptorSelector>
+ Hook from IProxyHook to IReference<IProxyHook>
+ MixIns from object[] to IEnumerable<IReference<object>>
+ IReference abstraction allows to use components resolved from the container, similar to InterceptorReferences.
+- Moved several types from Core:
+ ComponentActivatorAttribute
+ ComponentProxyBehaviorAttribute
+ CustomLifestyleAttribute
+ DoNotWireAttribute
+ InterceptorAttribute
+ LifestyleAttribute
+ PooledAttribute
+ TransientAttribute
+ GraphNode
+ IVertex
+ IRecyclable
+ IStartable
+ ComponentModel
+ ConstructorCandidate
+ ConstructorCandidateCollection
+ DependencyModel
+ DependencyModelCollection
+ InterceptorReference
+ InterceptorReferenceCollection
+ LifecycleStepCollection
+ MethodMetaModel
+ MethodMetaModelCollection
+ ParameterModel
+ ParameterModelCollection
+ PropertySet
+ PropertySetCollection
+ TopologicalSortAlgo
+ IOnBehalfAware
+ GraphSets
+ GraphTestCase
+
+
+2.1.1 (2010-01-13)
+==================
+- Reverted factory support facility changes in r6595, r6596 and r6653 which fixed IOC-ISSUE-153, however caused other bugs
+ reported on the mailing list (http://groups.google.com/group/castle-project-users/browse_thread/thread/3f2b602e738a08c6?hl=en)
+
+2.1.0 (2010-01-12)
+==================
+- Moved the logging facility project into the Windsor project:
+ - Applied Tom Allard's patch fixing FACILITIES-93
+ "Extra constructors on LoggingFacility"
+ - Added test case supplied by chris ortman
+ - Register base logger and factory when using extended logger.
+ - Fixed FACILITIES-77 - ILoggerFactory instance creation requires constructor with one argument
+
+- simplified API for attaching interceptors.
+
+- added support for forwarded types in XML config
+
+- added WithParameters method to fluent registration that enables inspecting and modifying arguments passed to Resolve method.
+- BREAKING CHANGE - AbstractHandler.Resolve method is no longer abstract and instead a ResolveCore protected abstract method was added. To fix this, implementers should override ResolveCore instead of Resolve.
+
+- added OnCreate method (refactored from OnCreateFacility created by Tehlike) which allows to specify actions to be invoked on the component right after it is created, and before it's returned from the container
+
+2.0
+====
+
+- Updated FactorySupportFacility and fluent registration to allow propagation
+ of CreationContext to factory methods
+
+- Fixed Burden release issue in which children were being released if the
+ component was not destroyed
+
+- Automatically configure proxy to omit target if no implementation
+
+- Fluent interface for factory support
+
+- Fixed an issue with of not considering unregistered service dependencies in arrays
+
+- Will not try to convert values that are already a match to the parameter type
+
+- XmlProcessor now properly dispose of the stream reader
+
+- The kernel will now check if trying to register null types
+
+RC 4
+====
+
+- Update FromInterface Registration policy to only consider toplevel interfaces
+ and allow multiple services.
+
+- Fixed bug in AllComponentsReleasePolicy in which burden not properly handled
+ on dispose.
+
+- Applied patch from Joao Braganca to allow abstract types in DefaultComponentActivator if proxied.
+
+- Added additional AddFacility overrides to improve fluent configuration of facilities.
+
+- Moved DefaultComponentActivator check for abstract so it can be better overriden.
+
+- Added Attribute to Component Registration fluent interface.
+
+- Add ability to use Configure components based on implementation type when
+ using AllTypesOf.
+
+- Do not return forward handlers in ResolveAll since you will get duplicate services.
+
+- Applied patch (with mods) from Martin Nllsson to select registration interface from
+ containing interface.
+
+- Added shortcut to AllTypes to accept a where.
+
+- Added ability to include non-public types in registration.
+
+- Updated registration to support providing multiple service types.
+
+- Add registration support for mixins.
+
+- Do not allow registering components with the same name in fluent interface.
+
+- Applied Ayendes patch to introduce component service type forwarding to
+ support multiple service interfaces for a component.
+ Extended the Component Registration interface to support service forwarding.
+
+- Avoid to register abstract component via IKernel.AddComponent, now throws when trying to add instead of while resolving component
+
+- Removed sealed qualifier from CreationContext and made ISubDependencyResolver
+ methods virtual so they can be overriden.
+
+- Made IKernel.AddFacility fluent.
+
+- Added StartMethod/StartMethod to ComponentRegistration.
+
+- Add if/unless support for ComponentRegistration.
+
+- Applied Daniel Jins patch to not proxy internal interfaces.
+
+- Fixed IOC-126
+ "PoolableLifestyleManager creates pool in constructor"
+
+- Fixed IOC-125
+ "DefaultGenericHandler does not properly handle proxied generic components"
+
+- Updated AllTypes strategy to support types based on generic type definitions.
+
+- Updated AllTypes strategy to support multiple registrations from a single set of types.
+
+- Collection handlers from parent container for GetAssignableHandlers.
+
+- Added ability to change invocation target to DefaultProxyFactory.
+
+- Fixed bug with ComponentRegistration.Instance in which the instance type was not assigned as the ComponentModel implementation.
+
+- Replaced AllTypesOf<T> syntax with AllTypes.Of<T> so a non-generic version can be consistently provided.
+
+- Added generic AddFacility methods to kernel.
+
+- Added generalized configuration support to ComponentRegistration.
+
+- Added IWindsorInstaller interface to enhance Windsor component installation.
+
+- Added AllTypesOf registration stratgey to simplify custom registration
+ scenarios.
+
+- Added IRegistration interface to allow alternate registration mechanisms.
+
+- Fixed CORE-16 (Should be Facilities)
+ "The FactorySupportFacility does not create proxies if interceptors are present"
+
+- Added support for list service overrides using the fluent registration interface.
+ Added support for specifying configuration parameters using the fluent interface to allow any complex
+ registration scenarios.
+
+- Restructured the registration fluent interface to be a little more readable,
+ better support component registrations and prevent errors resulting from
+ forgetting to call ComponentRegistration.Register
+
+- Fixed Facilities-97
+ "EventWiring Facility fails to create some components"
+
+- Added support for non-generic usage of fluent-interface. Needed for dynamic registrations scenarios (Binsor)
+ Automatically register the component between consecutive AddComponentEx (Saves a few strokes).
+
+- Initial version of MicroKernel/Windsor fluent interface IOC-99
+
+- Applied patch from Jacob Lewallen improving the locking performance in the DefaultNamingSubsystem under high load.
+
+- Applied Philippe Tremblay's patch fixing IOC-94
+ "Copy LifeStyle from generic interface"
+
+- Added support for copying interceptors defined on the geneirc interface handler.
+
+- Fixed IOC-80
+ "StartableFacility erroneously tries to start a component before
+ RegisterCustomDependency can be called"
+
+- Added ComponentModelConverter to utilize System.ComponentModel TypeConverters
+ Very useful for converting things like Fonts and Colors
+
+- Updated DefaultComplexConverter to support interfaces and derived types
+
+- Fixed IOC-96
+ "FactorySupport fails to create components if the factory instance is a proxy"
+
+- Fixed IOC-93
+ "GenericListConverter does not handle service overrides properly"
+
+- Fixed IOC-91
+ "ContextBoundObject's context is not bound when object is created by MicroKernel"
+
+- Fixed build from IContainerAccessor change
+
+- Applied Ron Grabowski's patch fixing IOC-89
+ "Make DefaultKernel implement IServiceProvider"
+
+- Check for required Properties before determining the Handlers initial state
+
+- Fixed IoC-87
+ "DefaultComplextConverter does not properly handle nested components"
+
+- Applied Lee Henson's patch fixing IOC-86
+ "Additional generic AddComponent overloads"
+
+- Applied Ido Samuelson patch fixing IOC-85
+ "IKernel to support generics to add/resolve components."
+
+- Refactored proxy options support. Now you can use the attribute 'marshalByRefProxy'
+ on the external configuration, or the ComponentProxyBehaviorAttribute
+
+- Fixed IOC-79
+ "Kernel.GetHandlers(Type) does not consider generic handlers when satisfying the type"
+
+- Updated StartableFacilityTestCase to correctly demonstrate the facility and
+ added a unit test to demonstrate IOC-80
+
+- Applied Alex Henderson's patch that makes the ComponentModel available
+ to the ILifestyleManager
+
+- Applied Adam Mills's patch fixing IOC-74
+ "BinaryComponentName VisitNode null check"
+
+- Fixed IOC-67
+ "RemoveComponent needs to unwire handlers and remove them"
+
+- Fixed IOC-59
+ "Child component unable to correctly resolve parent service added after the component"
+
+- Fixed IOC-47
+ "Components created by FactoryActivator have their dependencies checked"
+
+- Applied Marcus Widerberg's patch fixing FACILITIES-84
+ "FactorySupport - Allow parameters to factory method to be set at resolvetime"
+
+- Applied Marcus Widerberg's patch fixing FACILITIES-82
+ "Programmatic configuration for FactorySupport"
+
+- Reverted by Henry -> Apply patch from Sam Camp that fixes problems with Remoting Facility Sample and RecoverableComponent.
+
+- Updated TypedFactoryFacility to not require a target instance
+ when proxying.
+
+- Added Windsor proxy support to create proxies without targets.
+
+- Removed relationship between ProxyOptions and ProxyGeneration options
+ and moved ProxyOptions into the MicroKernel. ProxyGeneration options
+ are created from the ProxyOptions and will probably need to be updated
+ as facilities demand more proxy generation customizations.
+
+- Added ProxyOptions to allow facilities to easily add proxy interfaces
+ without having to create custom proxy factories. The ProxyOptions
+ are obtained via the ProxyUtil.
+
+- Fixed IOC-65
+ "DictionaryConverter should use the alternate overload of the
+ PerformConversion method in order to support dictionaries that contain
+ custom types"
+
+- Moved ProxyComponentInspector from Castle.MicroKernel to here and added
+ support to supply ProxyGenerationOptions on a ComponentModel basis. This
+ provides the needed ability to provide proxy options in facilities.
+
+- Fixed IOC-69 - DefaultDependencyResolver issue with Service Overrides.
+
+- Added ComponentProxyBehaviorAttribute and ComponentProxyInspector
+ to control the creation of component proxies.
+
+- Added eval support to configuration. Currently it only supports
+ BaseDirectory as a content to evaluate
+
+ <?eval $BaseDirectory ?>
+
+- Added IEnvironmentInfo in an attempt to solve complex
+ configuration/environment issues.
+
+- Fixing IOC-63 - source order of constructors should not matter
+
+- Fixed IOC-62
+ "Interceptors don't work properly on generic components"
+
+- Applied Norbert Wagner's patch fixing IOC-55
+ "Generic Type Converters: Set default entry types to generic arguments of property type"
+
+- Applied Jeff Brown's patch fixing IOC-54
+ "Empty component parameter values cause runtime exception during component resolution."
+
+- Applied patch by Bill Pierce that
+
+-- Introduces the WebUserControlComponentActivator
+
+-- Introduces the KeySearchNamingSubSystem
+
+-- Allows you to associate a custom component activator using
+ 1. componentActivatorType on component node
+ 2. ComponentActivatorAttribute
+
+-- Allows you to create and configure child containers
+ through the configuration, using
+
+ <configuration>
+ <containers>
+ <container name="child1">
+ <configuration>
+ <facilities>
+ ...
+ </facilities>
+
+ <components>
+ ...
+ </components>
+
+ </configuration>
+ </container>
+ </containers>
+ </configuration>
+
+- Applied AndyD's patch fixing IOC-52
+ "Remote access to generic components"
+
+- Fixed IOC-45
+ "Proxying a component that has an interface that is extended from another interface throws an exception"
+
+- Applied patch by Ernst Naezer fixing IOC-37
+ "Resolving with arguments in Windsor"
+
+- Fixed IOC-43
+ "Creation of an Attribute in the Kernel that allows one property to be ignored by the dependency builder"
+
+ Introduced DoNotWireAttribute that marks a property and prevents it
+ from being considered by the container
+
+- Changed Windsor to use DynamicProxy 2
+
+- Applied patch by Adam Mills fixing IOC-42
+ "ResolveServices", new method added to IKernel
+
+- Applied patch by Adam Mills fixing IOC-41
+ "Bug Fix BinaryTreeComponentName - Assumed Lesser nodes went to left"
+
+- Applied patch by Adam Mills fixing IOC-40
+ "Provided an Implementation for BinaryTreeComponentName.Remove"
+
+- Applied patch by Adam Mills fixing IOC-39
+ "Fix for Null Reference when accessing empty BinaryTreeComponentName"
+
+- Fixed IOC-35
+ "Add bootstrap section to configuration file"
+
+- Fixed issue where KeyAlreadyAdded exception would be throw for
+ components accepting two parameters of the same type, without overrides
+
+- Fixed IOC-36
+ "Transient components with multliple constructors throw
+ unresolved dependency exceptions."
+
+ Removed best candidate reference, as the kernel is dynamic it should
+ not cache best constructors as components can be added or removed
+ at any time
+
+ Removed Points from candidates, as in a multithreaded scenario
+ this would lead to failures
+
+
+- Fixed IOC-34
+ "Cannot use types having their own base type as constructor argument"
+
+ See revision r2787
+
+- IOC-32, Support generic collections.
+ Supported collections are: ICollection<T>, IList<T>, List<T>, IDictionary<K,V>, Dictionary<K,V>, IEnumerable<T>
+
+RC 3
+====
+
+- Applied patch by William C. Pierce <wcpierce@gmail.com> adding PerWebRequestAttribute
+
+- Added setter to ReleasePolicy property
+
+- Applied Curtis Schlak's patch fixing IOC-30
+ "Add overload to Windsor AddComponent to specify the Lifestyle"
+
+- Refactored AbstractHandler to use IDependencyResolver
+
+- Dependencies can be resolved now in three levels:
+
+ * CreationContext (which now implements ISubDependencyResolver)
+ * IHandler (which now implements ISubDependencyResolver)
+ * IKernel which is the normal flow
+
+- Implemented IoC-29 using a different approach
+
+- Renamed IKernel.AddComponentWithProperties to AddComponentExtendedProperties.
+ The old method name misled the programmer about its purpose.
+
+- Added a PerWebRequestLifestyleManager which creates at most one instance of
+ an object per web request. To use it you must add the following http module
+
+ <httpModules>
+ ...
+ <add name="PerWebRequest" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleManager , Castle.MicroKernel,Version=0.0.1.7, Culture=neutral, PublicKeyToken=407dd0808d44fbdc"/>
+
+ <httpModules>
+
+ The strong name could be omitted if not in the GAC
+
+- Added checks to handle cycles in dependencies graphs and avoid deadly Stack Overflow Exceptions.
+
+- Fixed IOC-24: "Allow user to provide an attribute which will customize how to inspect properties (PropertiesDependenciesModelInspector)"
+ Now users can add an 'inspectionBehavior' attribute to the component node that defines
+ the inspection strategy. Possible values are
+
+ - None: No properties inspection should happen
+ - All: All properties will be inspected and collected (on the class and on the superclasses).
+ This is the default behavior
+ - DeclaredOnly: Only properties specified on type are checked (superclasses will be ignored)
+
+- Added overload to ITypeConvertor that accept the current node configuration as well as the type in CanHandleType()
+
+- Change: Better error message when there's an exception
+ setting up properties
+
+- Fixed IOC-25: Overrides on the configuration should be considered a non-optional dependency
+
+ This fix changes a little the MicroKernel behavior. Now if you specify an service override
+ through external configuration, it will be considered a _non-optional_ dependency
+
+- Uri usage replaced by CustomUri which, differently than MS' Uri class, has the same
+ behavior on net-1.1, net-2.0 and mono
+
+- EventWiring Facility: now when a publisher is requested, the subscribers
+ are automatically started.
+
+ The side effects are:
+
+ - when a subscriber is requested it won't be wired automatically.
+ - There no much sense in having a subscriber with a lifestyle other than singleton
+
+ I'm still evaluating this idea. Sometimes wiring only when the subscriber is requested
+ might make sense, but supporting both approaches is kinda hard.
+
+
+- Applied patch by Alex Henderson <webmaster@bittercoder.com> adding
+ IWindsorContainer.RemoveChildContainer(IWindsorContainer childContainer)
+ and IKernel.RemoveChildKernel(IKernel kernel)
+
+- Applied fix by Ahmed. Now defines can be used on properties nodes like
+
+ <properties>
+ <?if DEBUG?>
+ <item>x</item>
+ <?end?>
+ </properties>
+
+- Now with DictionaryConverter you can specify the keyType and valueType on each entry (kudos to Ahmed)
+
+- xmlinterpreter will throw an exception if a property is not defined but referenced
+using #{propertyName} syntax.(Patch from Ahmed)
+
+- XmlProcessor refactored from XmlInterpreter (kudos to Ahmed)
+ Now PI are also supported (don't forget to document this on the wiki)
+
+- Support for nested nodes on the properties. (kudos to Ahmed)
+ Example:
+
+ <configuration>
+ <properties>
+ <MyComponentParams>
+ <user>Joe</user>
+ <pwd>Doe</pwd>
+ </MyComponentParams>
+ </properties>
+ <components id=??Component
+ <parameters>#{ MyComponentParams }</parameters>
+ </components>
+ </configuration>
+
+ Will result in
+
+ <components id=??Component
+ <parameters>
+ <user>Joe</user>
+ <pwd>Doe</pwd>
+ </parameters>
+ </components>
+
+- Type converter for kernel components. This allows a usage like this:
+
+ <component id="mycomp">
+
+ <parameters>
+ <servicelist>
+ <list type="IMyService, MyAssembly">
+ <item>${keytocomponent1}</item>
+ <item>${keytocomponent2}</item>
+ </list>
+ </servicelist>
+ </parameters>
+
+- Removed support for MethodMeta on ComponentModel. The design decision here
+ is to make the facilities interested on it to extend MethodMetaInspector
+ reading from a specific node.
+
+RC 2
+====
+
+- AsyncInitializationContainer introduced. Special container flavor that installs the
+ facilities and components using a background thread.
+
+- Support for evaluation of expressions within the xml configuration (kudos to Ahmed)
+ The following "statements" are supported:
+
+ <define flag="DEBUG" />
+ <undef flag="DEBUG"/>
+
+ <if defined="DEBUG">
+ component/facility nodes
+ </if>
+
+ <choose>
+ <when defined="DEBUG">
+ <component id="debug"/>
+ </when>
+ <when defined="Qa">
+ <component id="qa"/>
+ </when>
+ <when defined="Prod">
+ <component id="prod"/>
+ </when>
+ <otherwise>
+ <component id="default"/>
+ </otherwise>
+ </choose>
+
+- Startable facility: support to specify the attribute startable=true on the configuration
+
+- Better error messages: now the components waiting for dependencies will recursively
+ report what they are waiting for.
+
+- Support for custom lifestyle through configuration (kudos to Bawer Dagdeviren):
+
+ <component id="my.component"
+ type="MyLib.MyComponent, MyLib"
+ lifestyle="custom"
+ customLifestyleType="MyLib.MyCustomLifestyle, MyLib" />
+
+- Added Type converter for enums
+
+- Support to associate configuration nodes to methods. Usage:
+
+ <component>
+ <methods>
+ <save />
+ <save signature="System.String, mscorlib" />
+ <save signature="System.String, mscorlib;System.Int32, mscorlib" />
+ </methods>
+ </component>
+
+ Which is equivalent to
+
+ <component>
+ <methods>
+ <method name="save" />
+ <method name="save" signature="System.String, mscorlib" />
+ <method name="save" signature="System.String, mscorlib;System.Int32, mscorlib" />
+ </methods>
+ </component>
+
+- IResource introduced (FileResource, AssemblyResource, ConfigResource and UncResource)
+ which are accessible through Uris:
+
+ - FileResource:
+ file://pathtofile
+ (For example: file://c:\mydir\file.txt)
+
+ - AssemblyResource:
+ assembly://AssemblyName/ExtendingNamespace/filename
+ (For example: assembly://Castle.Windsor.Tests/Configuration2/include1.xml)
+
+ - ConfigResource:
+ config://sectioname
+ (For example: config://castle will fetch the
+ <configuration><castle> entry in the configuration)
+
+ - UncResource:
+ \\server\file
+ (For example: \\mysharedplace\myconfig.xml)
+
+- IResource, IResourceFactory and IResourceSubSystem introduced
+
+- Ability to use <properties> in configuration files. Usage
+
+ <properties>
+ <prop1>prop1 value</prop1>
+ <prop2>prop2 value</prop2>
+ </properties>
+
+ <facilities>
+
+ <facility id="testidengine" >
+ <item>#{prop1}</item>
+ </facility>
+
+ <facility id="testidengine2" >
+ <item value="#{prop2}"/>
+ </facility>
+
+ </facilities>
+
+
+- Ability to use <include> in configuration files. Usage
+
+ Main file:
+
+ <configuration>
+
+ <include uri="file://include1.xml"/>
+
+ </configuration>
+
+ include1.xml:
+
+ <configuration>
+
+ <components>
+
+ <component id="testidcomponent1">
+ </component>
+
+ <component id="testidcomponent2">
+ </component>
+
+ </components>
+
+ </configuration>
+
+
+Beta 3
+======
+
+- Bug in dependency resolution (when chained) fixed
+- Better message description on exceptions related to unresolved dependencies.
+- Fixed bug in AddComponentWithProperties
+
+Beta 2 - 10/apr/2005
+======
+
+- Bug fixes
+
+- Configuration object model separated into interpreters and sources
+
+- AbstractFacility added
+
+
+Beta 1 - 21/jan/2005
+======
+
+- Changed: from #{} to ${} - way of referencing to another component
+ on the configuration.
+
+- Added: support for dictionaries, lists and arrays on the configuration file.
+
+ <component>
+ <parameters>
+ <properties>
+ <dictionary>
+ <item key="mykey">value</item>
+ </dictionary>
+ </properties>
+ </parameters>
+ </component>
+
+- Added: Component Graph (used by the Remove method and to dispose the components)
+
+- Fixed: Remove method
+
+- Fixed: Windsor: Proxy for components with (service != impl)
80 src/packages/Castle.Windsor.2.5.3/lib/Committers.txt
@@ -0,0 +1,80 @@
+This file names who's behind the Castle Team. You can find more about us at http://www.castleproject.org/community/team.html
+
+Committers
+==========