Full Code of unitycontainer/container for AI

master 7c89f7cb33c9 cached
312 files
776.1 KB
165.8k tokens
1671 symbols
1 requests
Download .txt
Showing preview only (859K chars total). Download the full file or copy to clipboard to get everything.
Repository: unitycontainer/container
Branch: master
Commit: 7c89f7cb33c9
Files: 312
Total size: 776.1 KB

Directory structure:
gitextract_ldynwt33/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   └── workflows/
│       └── regression.yml
├── .gitignore
├── LICENSE
├── README.md
├── appveyor.yml
├── codecov.yml
├── package.props
├── package.sln
├── src/
│   ├── Builder/
│   │   ├── Context/
│   │   │   ├── BuilderContext.cs
│   │   │   └── BuilderContextExpression.cs
│   │   └── Stages/
│   │       ├── BuilderStage.cs
│   │       ├── SelectionStage.cs
│   │       └── UnityBuildStage.cs
│   ├── Events/
│   │   ├── ChildContainerCreatedEventArgs.cs
│   │   ├── NamedEventArgs.cs
│   │   ├── RegisterEventArgs.cs
│   │   └── RegisterInstanceEventArgs.cs
│   ├── Exceptions/
│   │   ├── DependencyMissingException.cs
│   │   ├── IllegalInjectionMethodException.Desktop.cs
│   │   ├── IllegalInjectionMethodException.cs
│   │   ├── InvalidRegistrationException.cs
│   │   └── MakeGenericTypeFailedException.cs
│   ├── Extension/
│   │   ├── ExtensionContext.cs
│   │   ├── IUnityContainerExtensionConfigurator.cs
│   │   └── UnityContainerExtension.cs
│   ├── Extensions/
│   │   ├── DefaultLifetime.cs
│   │   ├── Diagnostic.cs
│   │   ├── ExtensionExtensions.cs
│   │   ├── Legacy.cs
│   │   └── Strategies.cs
│   ├── Factories/
│   │   ├── DeferredFuncResolverFactory.cs
│   │   ├── EnumerableResolver.cs
│   │   └── GenericLazyResolverFactory.cs
│   ├── Injection/
│   │   └── Validating.cs
│   ├── Legacy/
│   │   ├── DynamicMethod/
│   │   │   └── DynamicBuildPlanGenerationContext.cs
│   │   ├── IBuildPlanCreatorPolicy.cs
│   │   ├── IBuildPlanPolicy.cs
│   │   ├── IConstructorSelectorPolicy.cs
│   │   ├── IMethodSelectorPolicy.cs
│   │   ├── IPropertySelectorPolicy.cs
│   │   ├── InjectionParameterValue.cs
│   │   ├── NamedTypeBuildKey.cs
│   │   ├── TypeBasedOverride.cs
│   │   └── TypedInjectionValue.cs
│   ├── Lifetime/
│   │   ├── ContainerLifetimeManager.cs
│   │   ├── InternalPerResolveLifetimeManager.cs
│   │   └── LifetimeContainer.cs
│   ├── Policy/
│   │   ├── Converter.cs
│   │   ├── IResolveDelegateFactory.cs
│   │   └── ISelect.cs
│   ├── Processors/
│   │   ├── Abstracts/
│   │   │   ├── MemberExpression.cs
│   │   │   ├── MemberProcessor.cs
│   │   │   └── MemberResolution.cs
│   │   ├── Constructor/
│   │   │   ├── ConstructorDiagnostic.cs
│   │   │   ├── ConstructorExpression.cs
│   │   │   ├── ConstructorProcessor.cs
│   │   │   └── ConstructorResolution.cs
│   │   ├── Fields/
│   │   │   ├── FieldDiagnostic.cs
│   │   │   └── FieldProcessor.cs
│   │   ├── Methods/
│   │   │   ├── MethodDiagnostic.cs
│   │   │   └── MethodProcessor.cs
│   │   ├── Parameters/
│   │   │   ├── ParametersDiagnostic.cs
│   │   │   └── ParametersProcessor.cs
│   │   └── Properties/
│   │       ├── PropertyDiagnostic.cs
│   │       └── PropertyProcessor.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Registration/
│   │   ├── ContainerRegistration.cs
│   │   └── InternalRegistration.cs
│   ├── Storage/
│   │   ├── HashRegistry.cs
│   │   ├── IRegistry.cs
│   │   ├── IStagedStrategyChain.cs
│   │   ├── LinkedNode.cs
│   │   ├── LinkedRegistry.cs
│   │   ├── PolicyList.cs
│   │   ├── QuickSet.cs
│   │   ├── RegistrationSet.cs
│   │   ├── Registrations.cs
│   │   └── StagedStrategyChain.cs
│   ├── Strategies/
│   │   ├── ArrayResolveStrategy.cs
│   │   ├── BuildKeyMappingStrategy.cs
│   │   ├── BuildPlanStrategy.cs
│   │   ├── BuilderStrategy.cs
│   │   └── LifetimeStrategy.cs
│   ├── Unity.Container.csproj
│   ├── Unity.Container.csproj.DotSettings
│   ├── UnityContainer.ContainerContext.cs
│   ├── UnityContainer.Diagnostic.cs
│   ├── UnityContainer.IUnityContainer.cs
│   ├── UnityContainer.Implementation.cs
│   ├── UnityContainer.Public.cs
│   ├── UnityContainer.Registration.cs
│   ├── UnityContainer.Resolution.cs
│   ├── Utility/
│   │   ├── ContainerConstants.cs
│   │   └── HashHelpers.cs
│   └── package.snk
└── tests/
    ├── Performance/
    │   ├── Abstracts/
    │   │   ├── BasicBase.cs
    │   │   └── RegistrationBase.cs
    │   ├── Configuration/
    │   │   └── BenchmarkConfiguration.cs
    │   ├── Data/
    │   │   ├── MultiType.cs
    │   │   └── TestData.cs
    │   ├── Performance.csproj
    │   ├── Program.cs
    │   └── Tests/
    │       ├── Registration/
    │       │   └── Registration.cs
    │       └── Resolution/
    │           ├── Compiled.cs
    │           ├── PreCompiled.cs
    │           ├── PreResolved.cs
    │           └── Resolved.cs
    ├── Unity.Diagnostic/
    │   ├── BuildUp.cs
    │   ├── Constructor.cs
    │   ├── Cyclic.cs
    │   ├── Field.cs
    │   ├── Hierarchical.cs
    │   ├── Issues.cs
    │   ├── Method.cs
    │   ├── Overrides.cs
    │   ├── Property.cs
    │   ├── Registration.cs
    │   └── Unity.Specification.Tests.Diagnostic.csproj
    ├── Unity.Specification/
    │   ├── BuildUp.cs
    │   ├── Constructor.cs
    │   ├── Container/
    │   │   ├── Hierachy.cs
    │   │   ├── IsRegistered.cs
    │   │   └── Registrations.cs
    │   ├── Factory/
    │   │   ├── Registration.cs
    │   │   └── Resolution.cs
    │   ├── Field.cs
    │   ├── Issues.cs
    │   ├── Lifetime.cs
    │   ├── Method.cs
    │   ├── Parameter.cs
    │   ├── Property.cs
    │   ├── Registration.cs
    │   ├── Resolution/
    │   │   ├── Array.cs
    │   │   ├── Basics.cs
    │   │   ├── Deferred.cs
    │   │   ├── Enumerable.cs
    │   │   ├── Generic.cs
    │   │   ├── Lazy.cs
    │   │   ├── Mapping.cs
    │   │   └── Overrides.cs
    │   └── Unity.Specification.Tests.csproj
    └── Unity.Tests/
        ├── ChildContainer/
        │   ├── ChildContainerInterfaceChangeFixture.cs
        │   ├── ITestContainer.cs
        │   ├── TestContainer.cs
        │   ├── TestContainer1.cs
        │   ├── TestContainer2.cs
        │   └── TestContainer3.cs
        ├── CollectionSupport/
        │   ├── CollectionSupportFixture.cs
        │   ├── ConfigurationTestClass.cs
        │   ├── ConfigurationTestClassGeneric.cs
        │   ├── ITestInterface.cs
        │   ├── TestClass.cs
        │   ├── TestClassDerived.cs
        │   ├── TestClassWithArrayDependency.cs
        │   ├── TestClassWithDependencyArrayConstructor.cs
        │   ├── TestClassWithDependencyArrayMethod.cs
        │   ├── TestClassWithDependencyArrayProperty.cs
        │   ├── TestClassWithDependencyEnumerableConstructor.cs
        │   ├── TestClassWithDependencyTypeConstructor.cs
        │   ├── TestClassWithDependencyTypeMethod.cs
        │   └── TestClassWithEnumerableDependency.cs
        ├── Container/
        │   ├── ContainerBuildUpFixture.cs
        │   ├── ContainerControlledLifetimeThreadingFixture.cs
        │   ├── ContainerDefaultContentFixture.cs
        │   ├── SeparateContainerFixture.cs
        │   ├── UnityExtensionFixture.cs
        │   └── UnityHierarchyFixture.cs
        ├── ContainerRegistration/
        │   ├── AnotherTypeImplementation.cs
        │   ├── GivenContainerIntrospectionCorrectUsageFixture.cs
        │   ├── ITypeAnotherInterface.cs
        │   ├── ITypeInterface.cs
        │   └── TypeImplementation.cs
        ├── Extensions/
        │   ├── DefaultLifetimeExtensionTests.cs
        │   ├── DiagnosticExtensionTests.cs
        │   └── LegacyExtensionTests.cs
        ├── Generics/
        │   ├── ClassWithConstMethodandProperty.cs
        │   ├── Foo.cs
        │   ├── FooRepository.cs
        │   ├── GenMockLogger.cs
        │   ├── GenSpecialLogger.cs
        │   ├── GenericA.cs
        │   ├── GenericB.cs
        │   ├── GenericC.cs
        │   ├── GenericChainingFixture.cs
        │   ├── GenericConstraintsFixture.cs
        │   ├── GenericD.cs
        │   ├── GenericList.cs
        │   ├── GenericParameterFixture.cs
        │   ├── GenericResolvedArrayParameterFixture.cs
        │   ├── GenericsFixture.cs
        │   ├── GenericsReflectionExperimentsFixture.cs
        │   ├── HaveAGenericType.cs
        │   ├── HaveManyGenericTypes.cs
        │   ├── HaveManyGenericTypesClosed.cs
        │   ├── IFoo.cs
        │   ├── IGenLogger.cs
        │   ├── IHaveAGenericType.cs
        │   ├── IHaveManyGenericTypes.cs
        │   ├── IHaveManyGenericTypesClosed.cs
        │   ├── IRepository.cs
        │   ├── MockRespository.cs
        │   ├── Refer.cs
        │   └── Refer1.cs
        ├── Injection/
        │   ├── InjectedMembersFixture.cs
        │   ├── InjectingArraysFixture.cs
        │   ├── OptionalDependencyAPIConfigurationFixture.cs
        │   ├── OptionalDependencyAttributeFixture.cs
        │   ├── OptionalDependencyFixture.cs
        │   └── OptionalGenericParameterFixture.cs
        ├── Issues/
        │   ├── CodeGenBugFixture.cs
        │   ├── CodeplexIssuesFixture.cs
        │   └── GitHub.cs
        ├── Lifetime/
        │   ├── A.cs
        │   ├── AA.cs
        │   ├── ATTest.cs
        │   ├── B.cs
        │   ├── BB.cs
        │   ├── HierarchicalLifetimeFixture.cs
        │   ├── I1.cs
        │   ├── I2.cs
        │   ├── ITTest.cs
        │   ├── LifetimeFixture.cs
        │   ├── PerResolveLifetimeFixture.cs
        │   └── UnityTestClass.cs
        ├── ObjectBuilder/
        │   ├── BuildPlanAndChildContainerFixture.cs
        │   ├── LifetimeContainerTest.cs
        │   ├── StagedStrategyChainTest.cs
        │   └── Utility/
        │       ├── ActivatorCreationStrategy.cs
        │       ├── AssertActualExpectedException.cs
        │       └── AssertHelper.cs
        ├── Override/
        │   ├── IForToUndergoeInject.cs
        │   ├── IForTypeToInject.cs
        │   ├── IInterfaceForTypesToInject.cs
        │   ├── IInterfaceForTypesToInjectForPropertyOverride.cs
        │   ├── ISubjectTypeToInject.cs
        │   ├── ISubjectTypeToInjectForPropertyOverride.cs
        │   ├── MultiThreadedPropertyOverrideFixture.cs
        │   ├── MySimpleType.cs
        │   ├── MySimpleTypeForPropertyOverride.cs
        │   ├── SubjectType1ToInject.cs
        │   ├── SubjectType1ToInjectForPropertyOverride.cs
        │   ├── SubjectType2ToInject.cs
        │   ├── SubjectType2ToInjectForPropertyOverride.cs
        │   ├── SubjectType3ToInject.cs
        │   ├── SubjectType3ToInjectForPropertyOverride.cs
        │   ├── TestTypeInConfig.cs
        │   ├── TypeBasedOverrideFixture.cs
        │   ├── TypeToInject1.cs
        │   ├── TypeToInject1ForTypeOverride.cs
        │   ├── TypeToInject2.cs
        │   ├── TypeToInject2ForTypeOverride.cs
        │   ├── TypeToInject3.cs
        │   ├── TypeToInject3ForTypeOverride.cs
        │   ├── TypeToInjectForPropertyOverride1.cs
        │   ├── TypeToInjectForPropertyOverride2.cs
        │   ├── TypeToInjectForPropertyOverride3.cs
        │   ├── TypeToToUndergoeTypeBasedInject2.cs
        │   ├── TypeToToUndergoeTypeBasedInject3.cs
        │   └── TypeToUndergoeTypeBasedInject1.cs
        ├── Storage/
        │   └── RegistrationSetTests.cs
        ├── TestDoubles/
        │   ├── DependencyAttribute.cs
        │   ├── InjectionConstructorAttribute.cs
        │   ├── InjectionMethodAttribute.cs
        │   ├── MockContainerExtension.cs
        │   ├── MockContainerExtensionWithNonDefaultConstructor.cs
        │   ├── SpyExtension.cs
        │   ├── SpyPolicy.cs
        │   └── SpyStrategy.cs
        ├── TestObjects/
        │   ├── DisposableObject.cs
        │   ├── EmailService.cs
        │   ├── FileLogger.cs
        │   ├── IBase.cs
        │   ├── IService.cs
        │   ├── NullLogger.cs
        │   ├── ObjectWithAmbiguousConstructors.cs
        │   ├── ObjectWithAmbiguousMarkedConstructor.cs
        │   ├── ObjectWithExplicitInterface.cs
        │   ├── ObjectWithInjectionConstructor.cs
        │   ├── ObjectWithLotsOfDependencies.cs
        │   ├── ObjectWithMarkedConstructor.cs
        │   ├── ObjectWithMultipleConstructors.cs
        │   ├── ObjectWithOneDependency.cs
        │   ├── ObjectWithStaticAndInstanceProperties.cs
        │   ├── ObjectWithTwoConstructorDependencies.cs
        │   └── OptionalLogger.cs
        ├── TestSupport/
        │   ├── AssertExtensions.cs
        │   ├── AssertHelper.cs
        │   ├── CollectionAssertExtensions.cs
        │   ├── EnumerableAssertionExtensions.cs
        │   ├── EnumerableExtensions.cs
        │   ├── ExtensibilityTestExtension.cs
        │   ├── Guard.cs
        │   ├── IAdditionalInterface.cs
        │   ├── ILogger.cs
        │   ├── MockContainerExtension.cs
        │   ├── MockDatabase.cs
        │   ├── MockLogger.cs
        │   ├── NegativeTypeConverter.cs
        │   ├── ObjectUsingLogger.cs
        │   ├── ObjectWithOneConstructorDependency.cs
        │   ├── ObjectWithTwoConstructorParameters.cs
        │   ├── ObjectWithTwoProperties.cs
        │   ├── Pair.cs
        │   ├── Sequence.cs
        │   ├── SessionLifetimeManager.cs
        │   ├── SpecialLogger.cs
        │   └── TypeReflectionExtensions.cs
        └── Unity.Tests.csproj

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto


###############################################################################
# Prevent merging of README.md
###############################################################################
README.md   merge=ours
.gitmodules merge=ours
*.yml       merge=ours

================================================
FILE: .github/FUNDING.yml
================================================
github: [ENikS]
open_collective: unity-container


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve

---

---
name: Bug report
about: Create a report to help us improve

---

### Description

A clear and concise description of what is wrong.

### To Reproduce

Please provide UnitTest in the form of:

```C#
[TestMethod]
public void SomeDescriptiveName()
{
    var container = new UnityContainer()
                .RegisterType<ISomeType, SomeType>();
    ...

    var res = container.Resolve<Func<ISomeType>>();
    
    Assert.SomeFailingVerification(...);
}
```

**Additional context**

Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project

---

### Description
Briefly explain the feature you are proposing to implement

### Problem
Is your feature request related to a problem? Please describe. 

### Solution
A clear and concise description of what you want to happen. 

### Impact
Possible impact of the change on existing users.




================================================
FILE: .github/workflows/regression.yml
================================================
# https://dotnet.microsoft.com/download/dotnet-core
# https://dotnet.microsoft.com/download/dotnet-framework

name: Regression Tests

on:
  push:
    branches: [ master, develop ]
    paths:
      - 'src/*'
      - 'test/*'
      - '.github/workflows/*'

  pull_request:
    branches: [ master, develop ]

jobs:
  build:
    runs-on: windows-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        path: Container

    - name: Cache
      id: unity-container
      uses: actions/cache@v1
      with:
        path: '${{ github.workspace }}\Container\src\bin\Release'
        key: ${{ github.sha }}

    - name: Build
      env:
        PackageVersion: '0.0.0'
      run: dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True Container\src

  # TODO: add net40

  net:
    needs: [ Build ]
    strategy:
      matrix:
        framework: ['net48', 'net47', 'net46', 'net45']
    runs-on:  windows-latest
    env:
      TargetFramework: ${{ matrix.framework }}

    steps:
    - name: Checkout Container
      uses: actions/checkout@v2
      with:
        path: Container

    - name: Checkout Tests
      uses: actions/checkout@v2
      with:
        repository: 'unitycontainer/specification-tests'
        path: SpecificationTests

    - name: Cache
      id: unity-container
      uses: actions/cache@v1
      with:
        path: '${{ github.workspace }}\Container\src\bin\Release'
        key: ${{ github.sha }}
  
    - name: Build
      run: |
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}\Container\tests\Unity.Tests\Unity.Tests.csproj
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}\Container\tests\Unity.Specification\Unity.Specification.Tests.csproj
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}\Container\tests\Unity.Diagnostic\Unity.Specification.Tests.Diagnostic.csproj

    - name: Test
      run: |
        dotnet test ${{ github.workspace }}\Container\tests\Unity.Tests
        dotnet test ${{ github.workspace }}\Container\tests\Unity.Specification
        dotnet test ${{ github.workspace }}\Container\tests\Unity.Diagnostic


  core-lts-2:
    needs: [ Build ]
    strategy:
      matrix:
        os: [windows-latest]
    runs-on:  ${{ matrix.os }}
    env:
      TargetFramework: netcoreapp2.0

    steps:
    - name: Checkout Container
      uses: actions/checkout@v2
      with:
        path: Container
    - name: Checkout Tests
      uses: actions/checkout@v2
      with:
        repository: 'unitycontainer/specification-tests'
        path: SpecificationTests

    - name: Install DotNet
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '2.1.806'

    - name: Cache
      id: unity-container
      uses: actions/cache@v1
      with:
        path: '${{ github.workspace }}/Container/src/bin/Release'
        key: ${{ github.sha }}

    - name: Build
      run: |
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}/Container/tests/Unity.Tests/Unity.Tests.csproj
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}/Container/tests/Unity.Specification/Unity.Specification.Tests.csproj
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}/Container/tests/Unity.Diagnostic/Unity.Specification.Tests.Diagnostic.csproj

    - name: Test
      run: |
        dotnet test ${{ github.workspace }}/Container/tests/Unity.Tests
        dotnet test ${{ github.workspace }}/Container/tests/Unity.Specification
        dotnet test ${{ github.workspace }}/Container/tests/Unity.Diagnostic


  core-lts-3:
    needs: [ Build ]
    strategy:
      matrix:
        os: [windows-latest, ubuntu-latest, macos-latest]
    runs-on:  ${{ matrix.os }}
    env:
      TargetFramework: netcoreapp3.0

    steps:
    - name: Checkout Container
      uses: actions/checkout@v2
      with:
        path: Container
    - name: Checkout Tests
      uses: actions/checkout@v2
      with:
        repository: 'unitycontainer/specification-tests'
        path: SpecificationTests

    - name: Install DotNet
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '3.1.202'

    - name: Cache
      id: unity-container
      uses: actions/cache@v1
      with:
        path: '${{ github.workspace }}/Container/src/bin/Release'
        key: ${{ github.sha }}

    - name: Build
      run: |
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}/Container/tests/Unity.Tests/Unity.Tests.csproj
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}/Container/tests/Unity.Specification/Unity.Specification.Tests.csproj
        dotnet msbuild -property:Configuration=Release -verbosity:m -restore:True ${{ github.workspace }}/Container/tests/Unity.Diagnostic/Unity.Specification.Tests.Diagnostic.csproj

    - name: Test
      run: |
        dotnet test ${{ github.workspace }}/Container/tests/Unity.Tests
        dotnet test ${{ github.workspace }}/Container/tests/Unity.Specification
        dotnet test ${{ github.workspace }}/Container/tests/Unity.Diagnostic


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results

[Dd]ebug/
[Rr]elease/
x64/
[Bb]in/
[Oo]bj/
[Ll]ib/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# Visual Studio 2015 cache/options directory
.vs/

# DNX
project.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.svclog
*.scc

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# Click-Once directory
publish/

# Publish Web Output
*.Publish.xml
*.pubxml
*.azurePubxml

# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
packages/
## TODO: If the tool you use requires repositories.config, also uncomment the next line
!packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml

*.publishsettings

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

# =========================
# Windows detritus
# =========================

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac desktop service store files
.DS_Store

_NCrunch*
project.lock.json
testresults.xml
testresults.xml


================================================
FILE: LICENSE
================================================
                                 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:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) 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

      (d) 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

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2020 .NET Foundation and Contributors
   All Rights Reserved

   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.


================================================
FILE: README.md
================================================
[![Build status](https://ci.appveyor.com/api/projects/status/s7s905q6xd6b2503/branch/master?svg=true)](https://ci.appveyor.com/project/unitycontainer/container/branch/master)
![Regression Tests](https://github.com/unitycontainer/container/workflows/Regression%20Tests/badge.svg?branch=master)
[![License](https://img.shields.io/badge/license-apache%202.0-60C060.svg)](https://github.com/IoC-Unity/Unity/blob/master/LICENSE)
[![NuGet](https://img.shields.io/nuget/dt/Unity.Container.svg)](https://www.nuget.org/packages/Unity.Container)
[![NuGet](https://img.shields.io/nuget/v/Unity.Container.svg)](https://www.nuget.org/packages/Unity.Container)

## Overview

The Unity Container (Unity) is a lightweight, extensible dependency injection container. It facilitates building loosely coupled applications and provides developers with the following advantages:

* Simplified object creation, especially for hierarchical object structures and dependencies
* Abstraction of requirements; this allows developers to specify dependencies at run time or in configuration and simplify management of crosscutting concerns
* Increased flexibility by deferring component configuration to the container
* Service location capability; this allows clients to store or cache the container
* Instance and type interception
* Registration by convention

## Code of Conduct

This project has adopted the code of conduct defined by the [Contributor Covenant](https://www.contributor-covenant.org/) to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](https://www.dotnetfoundation.org/code-of-conduct)

## Contributing

See the [Contributing guide](https://github.com/unitycontainer/unity/blob/master/CONTRIBUTING.md) for more information.

## .NET Foundation

Unity Container is a [.NET Foundation](https://dotnetfoundation.org/projects/unitycontainer) project


================================================
FILE: appveyor.yml
================================================
image: Visual Studio 2019
configuration: Release
platform: Any CPU

install:
  - ps: $env:build_version = (Select-Xml -Path ".\package.props" -XPath "/Project/PropertyGroup/VersionBase" | Select-Object -ExpandProperty Node).InnerText
  - ps: Update-AppveyorBuild -Version "$env:build_version.$env:APPVEYOR_BUILD_NUMBER"

assembly_info: 
  patch: false 
  assembly_informational_version: "{version} $(GIT_HASH)"

dotnet_csproj:
  patch: false

before_build:
- cmd: dotnet restore -v=n

build:
  project: package.sln
  parallel: true
  verbosity: minimal

after_build:
- choco install opencover.portable
- choco install codecov
  
test_script:
- OpenCover.Console.exe -register:user -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:"test --framework net46 --verbosity q"

after_test:
- codecov -f "results.xml" 

artifacts:
- path: '**\Unity.*.nupkg'
  name: 'Unity'


================================================
FILE: codecov.yml
================================================
#ignore:
#- "tests/*"           # Ignore tests
#- "src/Utility/*"     # Ignore utilities
#- "**/*.Designer.cs"  # Ignore generated code


================================================
FILE: package.props
================================================
<Project>

  <PropertyGroup>
    <VersionBase>5.11.11</VersionBase>
    <PackageReleaseNotes>This package is compatible with .NET Standard 1.0 and 2.0, .NET Core 1.0 and 2.0, .NET 4.0, 4.5, 4.6, 4.7</PackageReleaseNotes>
  </PropertyGroup>

  <PropertyGroup>
    <UnityAbstractionsVersion>5.11.*</UnityAbstractionsVersion>
    <TargetFrameworks>netstandard2.0;netstandard1.0;netcoreapp3.0;netcoreapp2.0;netcoreapp1.0;net48;net47;net46;net45;net40</TargetFrameworks>
  </PropertyGroup>
 
</Project>


================================================
FILE: package.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2002
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Container", "src\Unity.Container.csproj", "{EE1F752C-1FAB-41AD-AD63-857D0E62AB6B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{13CA431F-C840-429D-A83D-BFDEDCCA0F6F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Tests", "tests\Unity.Tests\Unity.Tests.csproj", "{25E09D23-F407-4A61-8446-E5FBD6F689B8}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{EE1F752C-1FAB-41AD-AD63-857D0E62AB6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{EE1F752C-1FAB-41AD-AD63-857D0E62AB6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{EE1F752C-1FAB-41AD-AD63-857D0E62AB6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{EE1F752C-1FAB-41AD-AD63-857D0E62AB6B}.Release|Any CPU.Build.0 = Release|Any CPU
		{25E09D23-F407-4A61-8446-E5FBD6F689B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{25E09D23-F407-4A61-8446-E5FBD6F689B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{25E09D23-F407-4A61-8446-E5FBD6F689B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{25E09D23-F407-4A61-8446-E5FBD6F689B8}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{25E09D23-F407-4A61-8446-E5FBD6F689B8} = {13CA431F-C840-429D-A83D-BFDEDCCA0F6F}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {7D864CD1-AEA6-4EDF-B8F8-071CE7F88251}
	EndGlobalSection
EndGlobal


================================================
FILE: src/Builder/Context/BuilderContext.cs
================================================
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using Unity.Exceptions;
using Unity.Lifetime;
using Unity.Policy;
using Unity.Registration;
using Unity.Resolution;
using Unity.Strategies;

namespace Unity.Builder
{
    /// <summary>
    /// Represents the context in which a build-up or tear-down operation runs.
    /// </summary>
    [SecuritySafeCritical]
    [DebuggerDisplay("Resolving: {Type},  Name: {Name}")]
    public struct BuilderContext : IResolveContext
    {
        #region Fields

        public ResolverOverride[] Overrides;
        public IPolicyList List;

        public delegate object ExecutePlanDelegate(BuilderStrategy[] chain, ref BuilderContext context);
        public delegate object ResolvePlanDelegate(ref BuilderContext context, ResolveDelegate<BuilderContext> resolver);

        #endregion


        #region IResolveContext

        public IUnityContainer Container => Lifetime?.Container;

        public Type Type { get; set; }

        public string Name { get; set; }

        public object Resolve(Type type, string name)
        {
            // Process overrides if any
            if (null != Overrides)
            {
                NamedType namedType = new NamedType
                {
                    Type = type,
                    Name = name
                };

                // Check if this parameter is overridden
                for (var index = Overrides.Length - 1; index >= 0; --index)
                {
                    var resolverOverride = Overrides[index];
                    // If matches with current parameter
                    if (resolverOverride is IResolve resolverPolicy &&
                        resolverOverride is IEquatable<NamedType> comparer && comparer.Equals(namedType))
                    {
                        var context = this;

                        return ResolvePlan(ref context, resolverPolicy.Resolve);
                    }
                }
            }

            return Resolve(type, name, (InternalRegistration)((UnityContainer)Container).GetRegistration(type, name));
        }

        #endregion


        #region IPolicyList

        public object Get(Type policyInterface)
        {
            return List.Get(RegistrationType, Name, policyInterface) ??
                   Registration.Get(policyInterface);
        }

        public object Get(Type type, string name, Type policyInterface)
        {
            return List.Get(type, name, policyInterface) ??
                   (type != RegistrationType || name != Name
                       ? ((UnityContainer)Container).GetPolicy(type, name, policyInterface)
                       : Registration.Get(policyInterface));
        }

        public object Get(Type type, Type policyInterface)
        {
            return List.Get(type, UnityContainer.All, policyInterface) ??
                   ((UnityContainer)Container).GetPolicy(type, UnityContainer.All, policyInterface);
        }

        public void Set(Type policyInterface, object policy)
        {
            List.Set(RegistrationType, Name, policyInterface, policy);
        }

        public void Set(Type type, Type policyInterface, object policy)
        {
            List.Set(type, UnityContainer.All, policyInterface, policy);
        }

        public void Set(Type type, string name, Type policyInterface, object policy)
        {
            List.Set(type, name, policyInterface, policy);
        }

        public void Clear(Type type, string name, Type policyInterface)
        {
            List.Clear(type, name, policyInterface);
        }

        #endregion


        #region Registration

        public Type RegistrationType { get; set; }

        public IPolicySet Registration { get; set; }

        #endregion


        #region Public Properties

        public object Existing { get; set; }

        public ILifetimeContainer Lifetime;

        public SynchronizedLifetimeManager RequiresRecovery;

        public bool BuildComplete;

        public Type DeclaringType;
#if !NET40
        public IntPtr Parent;
#endif
        public ExecutePlanDelegate ExecutePlan;

        public ResolvePlanDelegate ResolvePlan;

        #endregion


        #region Public Methods

        public object Resolve(Type type, string name, InternalRegistration registration)
        {
            unsafe
            {
                var thisContext = this;
                var containerRegistration = registration as ContainerRegistration;
                var container = registration.Get(typeof(LifetimeManager)) is ContainerControlledLifetimeManager manager
                              ? ((UnityContainer)manager.Scope).LifetimeContainer
                              : Lifetime;

                var context = new BuilderContext
                {
                    Lifetime = container,
                    Registration = registration,
                    RegistrationType = type,
                    Name = name,
                    Type = null != containerRegistration ? containerRegistration.Type : type,
                    ExecutePlan = ExecutePlan,
                    ResolvePlan = ResolvePlan,
                    List = List,
                    Overrides = Overrides,
                    DeclaringType = Type,
#if !NET40
                    Parent = new IntPtr(Unsafe.AsPointer(ref thisContext))
#endif
                };

                return ExecutePlan(registration.BuildChain, ref context);
            }
        }

        public object Resolve(ParameterInfo parameter, object value)
        {
            var context = this;

            // Process overrides if any
            if (null != Overrides)
            {
                // Check if this parameter is overridden
                for (var index = Overrides.Length - 1; index >= 0; --index)
                {
                    var resolverOverride = Overrides[index];

                    // If matches with current parameter
                    if (resolverOverride is IEquatable<ParameterInfo> comparer && comparer.Equals(parameter))
                    {
                        // Check if itself is a value 
                        if (resolverOverride is IResolve resolverPolicy)
                        {
                            return ResolvePlan(ref context, resolverPolicy.Resolve);
                        }

                        // Try to create value
                        var resolveDelegate = resolverOverride.GetResolver<BuilderContext>(parameter.ParameterType);
                        if (null != resolveDelegate)
                        {
                            return ResolvePlan(ref context, resolveDelegate);
                        }
                    }
                }
            }

            // Resolve from injectors
            switch (value)
            {
                case ParameterInfo info
                when ReferenceEquals(info, parameter):
                    return Resolve(parameter.ParameterType, null);

                case ResolveDelegate<BuilderContext> resolver:
                    return resolver(ref context);
            }

            return value;
        }

        public object Resolve(PropertyInfo property, object value)
        {
            var context = this;

            // Process overrides if any
            if (null != Overrides)
            {
                // Check for property overrides
                for (var index = Overrides.Length - 1; index >= 0; --index)
                {
                    var resolverOverride = Overrides[index];

                    // Check if this parameter is overridden
                    if (resolverOverride is IEquatable<PropertyInfo> comparer && comparer.Equals(property))
                    {
                        // Check if itself is a value 
                        if (resolverOverride is IResolve resolverPolicy)
                        {
                            return ResolvePlan(ref context, resolverPolicy.Resolve);
                        }

                        // Try to create value
                        var resolveDelegate = resolverOverride.GetResolver<BuilderContext>(property.PropertyType);
                        if (null != resolveDelegate)
                        {
                            return ResolvePlan(ref context, resolveDelegate);
                        }
                    }
                }
            }

            // Resolve from injectors
            switch (value)
            {
                case PropertyInfo info when 
                ReferenceEquals(info, property):
                    return Resolve(info.PropertyType, null);

                case DependencyAttribute dependencyAttribute:
                    return Resolve(property.PropertyType, dependencyAttribute.Name);

                case OptionalDependencyAttribute optionalAttribute:
                    try
                    {
                        return Resolve(property.PropertyType, optionalAttribute.Name);
                    }
                    catch (Exception ex) 
                    when (!(ex.InnerException is CircularDependencyException))
                    {
                        return null;
                    }

                case ResolveDelegate<BuilderContext> resolver:
                    return resolver(ref context);
            }

            return value;
        }

        public object Resolve(FieldInfo field, object value)
        {
            var context = this;

            // Process overrides if any
            if (null != Overrides)
            {
                // Check for property overrides
                for (var index = Overrides.Length - 1; index >= 0; --index)
                {
                    var resolverOverride = Overrides[index];

                    // Check if this parameter is overridden
                    if (resolverOverride is IEquatable<FieldInfo> comparer && comparer.Equals(field))
                    {
                        // Check if itself is a value 
                        if (resolverOverride is IResolve resolverPolicy)
                        {
                            return ResolvePlan(ref context, resolverPolicy.Resolve);
                        }

                        // Try to create value
                        var resolveDelegate = resolverOverride.GetResolver<BuilderContext>(field.FieldType);
                        if (null != resolveDelegate)
                        {
                            return ResolvePlan(ref context, resolveDelegate);
                        }
                    }
                }
            }

            // Resolve from injectors
            switch (value)
            {
                case FieldInfo info when
                ReferenceEquals(info, field):
                    return Resolve(info.FieldType, null);

                case DependencyAttribute dependencyAttribute:
                    return Resolve(field.FieldType, dependencyAttribute.Name);

                case OptionalDependencyAttribute optionalAttribute:
                    try
                    {
                        return Resolve(field.FieldType, optionalAttribute.Name);
                    }
                    catch (Exception ex) 
                    when (!(ex.InnerException is CircularDependencyException))
                    {
                        return null;
                    }

                case ResolveDelegate<BuilderContext> resolver:
                    return resolver(ref context);
            }

            return value;
        }

        #endregion
    }
}


================================================
FILE: src/Builder/Context/BuilderContextExpression.cs
================================================
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Resolution;

namespace Unity.Builder
{
    public class BuilderContextExpression : IResolveContextExpression<BuilderContext>
    {
        #region Fields

        public static readonly MethodInfo ResolvePropertyMethod =
            typeof(BuilderContext).GetTypeInfo()
                .GetDeclaredMethods(nameof(BuilderContext.Resolve))
                .First(m =>
                {
                    var parameters = m.GetParameters();
                    return 0 < parameters.Length &&
                        typeof(PropertyInfo) == parameters[0].ParameterType;
                });

        public static readonly MethodInfo ResolveFieldMethod =
            typeof(BuilderContext).GetTypeInfo()
                .GetDeclaredMethods(nameof(BuilderContext.Resolve))
                .First(m =>
                {
                    var parameters = m.GetParameters();
                    return 0 < parameters.Length &&
                        typeof(FieldInfo) == parameters[0].ParameterType;
                });

        public static readonly MethodInfo ResolveParameterMethod =
            typeof(BuilderContext).GetTypeInfo()
                .GetDeclaredMethods(nameof(BuilderContext.Resolve))
                .First(m =>
                {
                    var parameters = m.GetParameters();
                    return 0 < parameters.Length &&
                        typeof(ParameterInfo) == parameters[0].ParameterType;
                });

        public static readonly MethodInfo SetMethod =
            typeof(BuilderContext).GetTypeInfo()
                .GetDeclaredMethods(nameof(BuilderContext.Set))
                .First(m => 2 == m.GetParameters().Length);

        #endregion


        #region Constructor

        static BuilderContextExpression()
        {
            var typeInfo = typeof(BuilderContext).GetTypeInfo();


            Existing  = Expression.MakeMemberAccess(Context, typeInfo.GetDeclaredProperty(nameof(BuilderContext.Existing)));
        }

        #endregion


        #region Public Properties

        public static readonly MemberExpression Existing;

        #endregion
    }
}


================================================
FILE: src/Builder/Stages/BuilderStage.cs
================================================


namespace Unity.Builder
{
    /// <summary>
    /// Enumeration to represent the object builder stages.
    /// </summary>
    /// <remarks>
    /// The order of the values in the enumeration is the order in which the stages are run.
    /// </remarks>
    public enum BuilderStage
    {
        /// <summary>
        /// Strategies in this stage run before creation. Typical work done in this stage might
        /// include strategies that use reflection to set policies into the context that other
        /// strategies would later use.
        /// </summary>
        PreCreation,

        /// <summary>
        /// Strategies in this stage create objects. Typically you will only have a single policy-driven
        /// creation strategy in this stage.
        /// </summary>
        Creation,

        /// <summary>
        /// Strategies in this stage work on created objects.
        /// </summary>
        Initialization,

        /// <summary>
        /// Strategies in this stage initialize fields.
        /// </summary>
        Fields,

        /// <summary>
        /// Strategies in this stage work initialize properties.
        /// </summary>
        Properties,

        /// <summary>
        /// Strategies in this stage do method calls.
        /// </summary>
        Methods,

        /// <summary>
        /// Strategies in this stage work on objects that are already initialized. Typical work done in
        /// this stage might include looking to see if the object implements some notification interface
        /// to discover when its initialization stage has been completed.
        /// </summary>
        PostInitialization
    }
}


================================================
FILE: src/Builder/Stages/SelectionStage.cs
================================================
namespace Unity.Builder
{
    public enum SelectionStage
    {
        Injected = 0,

        Custom = 1,

        Default = 2
    }
}


================================================
FILE: src/Builder/Stages/UnityBuildStage.cs
================================================


namespace Unity.Builder
{
    /// <summary>
    /// The build stages we use in the Unity container
    /// strategy pipeline.
    /// </summary>
    public enum UnityBuildStage
    {
        /// <summary>
        /// First stage. By default, nothing happens here.
        /// </summary>
        Setup,

        /// <summary>
        /// Stage where Array or IEnumerable is resolved
        /// </summary>
        Enumerable,

        /// <summary>
        /// Third stage. lifetime managers are checked here,
        /// and if they're available the rest of the pipeline is skipped.
        /// </summary>
        Lifetime,

        /// <summary>
        /// Second stage. Type mapping occurs here.
        /// </summary>
        TypeMapping,

        /// <summary>
        /// Fourth stage. Reflection over constructors, properties, etc. is
        /// performed here.
        /// </summary>
        PreCreation,

        /// <summary>
        /// Fifth stage. Instance creation happens here.
        /// </summary>
        Creation,

        /// <summary>
        /// Sixth stage. Property sets and method injection happens here.
        /// </summary>
        Initialization,

        /// <summary>
        /// Seventh and final stage. By default, nothing happens here.
        /// </summary>
        PostInitialization
    }
}


================================================
FILE: src/Events/ChildContainerCreatedEventArgs.cs
================================================


using System;
using Unity.Extension;

namespace Unity.Events
{
    /// <summary>
    /// Event argument class for the <see cref="ExtensionContext.ChildContainerCreated"/> event.
    /// </summary>
    public class ChildContainerCreatedEventArgs : EventArgs
    {
        /// <summary>
        /// Construct a new <see cref="ChildContainerCreatedEventArgs"/> object with the
        /// given child container object.
        /// </summary>
        /// <param name="childContext">An <see cref="ExtensionContext"/> for the newly created child
        /// container.</param>
        public ChildContainerCreatedEventArgs(ExtensionContext childContext)
        {
            ChildContext = childContext;
        }

        /// <summary>
        /// The newly created child container.
        /// </summary>
        public IUnityContainer ChildContainer => ChildContext.Container;

        /// <summary>
        /// An extension context for the created child container.
        /// </summary>
        public ExtensionContext ChildContext { get; }
    }
}


================================================
FILE: src/Events/NamedEventArgs.cs
================================================


using System;

namespace Unity.Events
{
    /// <summary>
    /// An EventArgs class that holds a string Name.
    /// </summary>
    public abstract class NamedEventArgs : EventArgs
    {
        private string _name;

        /// <summary>
        /// Create a new <see cref="NamedEventArgs"/> with a null name.
        /// </summary>
        protected NamedEventArgs()
        {
        }

        /// <summary>
        /// Create a new <see cref="NamedEventArgs"/> with the given name.
        /// </summary>
        /// <param name="name">Name to store.</param>
        protected NamedEventArgs(string name)
        {
            _name = name;
        }

        /// <summary>
        /// The name.
        /// </summary>
        /// <value>Name used for this EventArg object.</value>
        public virtual string Name
        {
            get => _name;
            set => _name = value;
        }
    }
}


================================================
FILE: src/Events/RegisterEventArgs.cs
================================================
using System;
using Unity.Extension;
using Unity.Lifetime;

namespace Unity.Events
{
    /// <summary>
    /// Event argument class for the <see cref="ExtensionContext.Registering"/> event.
    /// </summary>
    public class RegisterEventArgs : NamedEventArgs
    {
        /// <summary>
        /// Create a new instance of <see cref="RegisterEventArgs"/>.
        /// </summary>
        /// <param name="typeFrom">Type to map from.</param>
        /// <param name="typeTo">Type to map to.</param>
        /// <param name="name">Name for the registration.</param>
        /// <param name="lifetimeManager"><see cref="LifetimeManager"/> to manage instances.</param>
        public RegisterEventArgs(Type typeFrom, Type typeTo, string name, LifetimeManager lifetimeManager)
            : base(name)
        {
            TypeFrom = typeFrom;
            TypeTo = typeTo;
            LifetimeManager = lifetimeManager;
        }

        /// <summary>
        /// Type to map from.
        /// </summary>
        public Type TypeFrom { get; }

        /// <summary>
        /// Type to map to.
        /// </summary>
        public Type TypeTo { get; }

        /// <summary>
        /// <see cref="LifetimeManager"/> to manage instances.
        /// </summary>
        public LifetimeManager LifetimeManager { get; }
    }
}


================================================
FILE: src/Events/RegisterInstanceEventArgs.cs
================================================
using System;
using Unity.Extension;
using Unity.Lifetime;

namespace Unity.Events
{
    /// <summary>
    /// Event argument class for the <see cref="ExtensionContext.RegisteringInstance"/> event.
    /// </summary>
    public class RegisterInstanceEventArgs : NamedEventArgs
    {
        /// <summary>
        /// Create a default <see cref="RegisterInstanceEventArgs"/> instance.
        /// </summary>
        public RegisterInstanceEventArgs()
        {
        }

        /// <summary>
        /// Create a <see cref="RegisterInstanceEventArgs"/> instance initialized with the given arguments.
        /// </summary>
        /// <param name="registeredType">Type of instance being registered.</param>
        /// <param name="instance">The instance object itself.</param>
        /// <param name="name">Name to register under, null if default registration.</param>
        /// <param name="lifetimeManager"><see cref="LifetimeManager"/> object that handles how
        /// the instance will be owned.</param>
        public RegisterInstanceEventArgs(Type registeredType, object instance, string name, LifetimeManager lifetimeManager)
            : base(name)
        {
            RegisteredType = registeredType;
            Instance = instance;
            LifetimeManager = lifetimeManager;
        }

        /// <summary>
        /// Type of instance being registered.
        /// </summary>
        /// <value>
        /// Type of instance being registered.
        /// </value>
        public Type RegisteredType { get; }

        /// <summary>
        /// Instance object being registered.
        /// </summary>
        /// <value>Instance object being registered</value>
        public object Instance { get; }

        /// <summary>
        /// <see cref="Unity.LifetimeManager"/> that controls ownership of
        /// this instance.
        /// </summary>
        public LifetimeManager LifetimeManager { get; }
    }
}


================================================
FILE: src/Exceptions/DependencyMissingException.cs
================================================
using System;
using System.Globalization;

namespace Unity.Exceptions
{
    /// <summary>
    /// Represents that a dependency could not be resolved.
    /// </summary>
    public class DependencyMissingException : Exception
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DependencyMissingException"/> class with no extra information.
        /// </summary>
        public DependencyMissingException()
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DependencyMissingException"/> class with the given message.
        /// </summary>
        /// <param name="message">Some random message.</param>
        public DependencyMissingException(string message)
            : base(message)
        {
        }

        /// <summary>
        /// Initialize a new instance of the <see cref="DependencyMissingException"/> class with the given
        /// message and inner exception.
        /// </summary>
        /// <param name="message">Some random message</param>
        /// <param name="innerException">Inner exception.</param>
        public DependencyMissingException(string message, Exception innerException)
            : base(message, innerException)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DependencyMissingException"/> class with the build key of the object begin built.
        /// </summary>
        /// <param name="buildKey">The build key of the object begin built.</param>
        public DependencyMissingException(object buildKey)
            : base(string.Format(CultureInfo.CurrentCulture,
                Error.MissingDependency,
                buildKey))
        {
        }
    }
}


================================================
FILE: src/Exceptions/IllegalInjectionMethodException.Desktop.cs
================================================
using System;

namespace Unity.Exceptions
{
    /// <summary>
    /// The exception thrown when injection is attempted on a method
    /// that is an open generic or has out or ref params.
    /// </summary>
    [Serializable] 
    public partial class IllegalInjectionMethodException 
    {
    }
}


================================================
FILE: src/Exceptions/IllegalInjectionMethodException.cs
================================================


using System;

namespace Unity.Exceptions
{
    /// <summary>
    /// The exception thrown when injection is attempted on a method
    /// that is an open generic or has out or ref params.
    /// </summary>
    public partial class IllegalInjectionMethodException : Exception
    {
        /// <summary>
        /// Construct a new <see cref="IllegalInjectionMethodException"/> with no
        /// message.
        /// </summary>
        public IllegalInjectionMethodException()
        {
        }

        /// <summary>
        /// Construct a <see cref="IllegalInjectionMethodException"/> with the given message
        /// </summary>
        /// <param name="message">Message to return.</param>
        public IllegalInjectionMethodException(string message)
            : base(message)
        {
        }

        /// <summary>
        /// Construct a <see cref="IllegalInjectionMethodException"/> with the given message
        /// and inner exception.
        /// </summary>
        /// <param name="message">Message to return.</param>
        /// <param name="innerException">Inner exception</param>
        public IllegalInjectionMethodException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }
}


================================================
FILE: src/Exceptions/InvalidRegistrationException.cs
================================================
using System;

namespace Unity.Exceptions
{
    internal class InvalidRegistrationException : Exception
    {
        public InvalidRegistrationException()
            : base()
        {

        }

        public InvalidRegistrationException(string message, Exception exception)
            : base(message, exception)
        {
        }
    }
}


================================================
FILE: src/Exceptions/MakeGenericTypeFailedException.cs
================================================
using System;

namespace Unity.Exceptions
{
    internal class MakeGenericTypeFailedException : Exception
    {
        public MakeGenericTypeFailedException(ArgumentException innerException)
            : base("MakeGenericType failed", innerException)
        {
        }
    }
}


================================================
FILE: src/Extension/ExtensionContext.cs
================================================
using System;
using Unity.Builder;
using Unity.Events;
using Unity.Injection;
using Unity.Lifetime;
using Unity.Policy;
using Unity.Processors;
using Unity.Storage;
using Unity.Strategies;

namespace Unity.Extension
{
    /// <summary>
    /// The <see cref="ExtensionContext"/> class provides the means for extension objects
    /// to manipulate the internal state of the <see cref="IUnityContainer"/>.
    /// </summary>
    public abstract class ExtensionContext
    {
        #region Container

        /// <summary>
        /// The container that this context is associated with.
        /// </summary>
        /// <value>The <see cref="IUnityContainer"/> object.</value>
        public abstract IUnityContainer Container { get; }

        /// <summary>
        /// The <see cref="Unity.WithLifetime.ILifetimeContainer"/> that this container uses.
        /// </summary>
        /// <value>The <see cref="Unity.WithLifetime.ILifetimeContainer"/> is used to manage <see cref="IDisposable"/> objects that the container is managing.</value>
        public abstract ILifetimeContainer Lifetime { get; }

        #endregion


        #region Strategies

        /// <summary>
        /// The strategies this container uses.
        /// </summary>
        /// <value>The <see cref="IStagedStrategyChain{TStrategyType,TStageEnum}"/> that the container uses to build objects.</value>
        public abstract IStagedStrategyChain<BuilderStrategy, UnityBuildStage> Strategies { get; }

        /// <summary>
        /// The strategies this container uses to construct build plans.
        /// </summary>
        /// <value>The <see cref="IStagedStrategyChain{TStrategyType,TStageEnum}"/> that this container uses when creating
        /// build plans.</value>
        public abstract IStagedStrategyChain<MemberProcessor, BuilderStage> BuildPlanStrategies { get; }

        #endregion


        #region Policy Lists

        /// <summary>
        /// The policies this container uses.
        /// </summary>
        /// <remarks>The <see cref="IPolicyList"/> the that container uses to build objects.</remarks>
        public abstract IPolicyList Policies { get; }

        #endregion


        #region Events

        /// <summary>
        /// This event is raised when the 
        /// <see cref="IUnityContainer.RegisterType(Type,Type,string,LifetimeManager, InjectionMember[])"/> 
        /// method, or one of its overloads, is called.
        /// </summary>
        public abstract event EventHandler<RegisterEventArgs> Registering;

        /// <summary>
        /// This event is raised when the <see cref="IUnityContainer.RegisterInstance(Type,string,object,LifetimeManager)"/> method,
        /// or one of its overloads, is called.
        /// </summary>
        public abstract event EventHandler<RegisterInstanceEventArgs> RegisteringInstance;

        /// <summary>
        /// This event is raised when the <see cref="IUnityContainer.CreateChildContainer"/> method is called, providing 
        /// the newly created child container to extensions to act on as they see fit.
        /// </summary>
        public abstract event EventHandler<ChildContainerCreatedEventArgs> ChildContainerCreated;

        #endregion
    }
}


================================================
FILE: src/Extension/IUnityContainerExtensionConfigurator.cs
================================================



namespace Unity.Extension
{
    /// <summary>
    /// Base interface for all extension configuration interfaces.
    /// </summary>
    public interface IUnityContainerExtensionConfigurator
    {
        /// <summary>
        /// Retrieve the container instance that we are currently configuring.
        /// </summary>
        IUnityContainer Container { get; }
    }
}


================================================
FILE: src/Extension/UnityContainerExtension.cs
================================================


using System;

namespace Unity.Extension
{
    /// <summary>
    /// Base class for all <see cref="IUnityContainer"/> extension objects.
    /// </summary>
    public abstract class UnityContainerExtension : IUnityContainerExtensionConfigurator
    {
        private IUnityContainer _container;
        private ExtensionContext _context;

        /// <summary>
        /// The container calls this method when the extension is added.
        /// </summary>
        /// <param name="context">A <see cref="ExtensionContext"/> instance that gives the
        /// extension access to the internals of the container.</param>
        public void InitializeExtension(ExtensionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            _container = context.Container;
            _context = context;
            Initialize();
        }

        /// <summary>
        /// The container this extension has been added to.
        /// </summary>
        /// <value>The <see cref="IUnityContainer"/> that this extension has been added to.</value>
        public IUnityContainer Container => _container;

        /// <summary>
        /// The <see cref="ExtensionContext"/> object used to manipulate
        /// the inner state of the container.
        /// </summary>
        protected ExtensionContext Context => _context;

        /// <summary>
        /// Initial the container with this extension's functionality.
        /// </summary>
        /// <remarks>
        /// When overridden in a derived class, this method will modify the given
        /// <see cref="ExtensionContext"/> by adding strategies, policies, etc. to
        /// install it's functions into the container.</remarks>
        protected abstract void Initialize();

        /// <summary>
        /// Removes the extension's functions from the container.
        /// </summary>
        /// <remarks>
        /// <para>
        /// This method is called when extensions are being removed from the container. It can be
        /// used to do things like disconnect event handlers or clean up member state. You do not
        /// need to remove strategies or policies here; the container will do that automatically.
        /// </para>
        /// <para>
        /// The default implementation of this method does nothing.</para>
        /// </remarks>
        public virtual void Remove()
        {
            // Do nothing by default, can be overridden to do whatever you want.
        }
    }
}


================================================
FILE: src/Extensions/DefaultLifetime.cs
================================================
using System;
using Unity.Extension;
using Unity.Lifetime;

namespace Unity
{
    public class DefaultLifetime : UnityContainerExtension
    {
        protected override void Initialize()
        {
        }

        #region Public Members

        public ITypeLifetimeManager TypeDefaultLifetime
        {
            get => (ITypeLifetimeManager)((UnityContainer)Container).TypeLifetimeManager;
            set => ((UnityContainer)Container).TypeLifetimeManager = (LifetimeManager)value ??
                throw new ArgumentNullException("Type Lifetime Manager can not be null");
        }

        public IInstanceLifetimeManager InstanceDefaultLifetime
        {
            get => (IInstanceLifetimeManager)((UnityContainer)Container).InstanceLifetimeManager;
            set => ((UnityContainer)Container).InstanceLifetimeManager = (LifetimeManager)value ??
                throw new ArgumentNullException("Instance Lifetime Manager can not be null");
        }

        public IFactoryLifetimeManager FactoryDefaultLifetime
        {
            get => (IFactoryLifetimeManager)((UnityContainer)Container).FactoryLifetimeManager;
            set => ((UnityContainer)Container).FactoryLifetimeManager = (LifetimeManager)value ??
                throw new ArgumentNullException("Factory Lifetime Manager can not be null");
        }

        #endregion
    }
}


================================================
FILE: src/Extensions/Diagnostic.cs
================================================
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using Unity.Extension;
using Unity.Factories;
using Unity.Policy;

namespace Unity
{
    /// <summary>
    /// Diagnostic extension implements validating when calling <see cref="IUnityContainer.RegisterType"/>, 
    /// <see cref="IUnityContainer.Resolve"/>, and <see cref="IUnityContainer.BuildUp"/> methods. When executed 
    /// these methods provide extra layer of verification and validation as well 
    /// as more detailed reporting of error conditions.
    /// </summary>
    /// <remarks>
    /// <para>
    /// Unity uses reflection to gather information about types, members, and parameters. 
    /// It is quite obvious that it takes significant amount of time during execution. So, 
    /// to optimize performance all these verifications where moved to the Diagnostic
    /// extension. It is recommended to include this extension only during 
    /// development cycle and refrain from executing it in production 
    /// environment.
    /// </para>
    /// <para>
    /// This extension can be registered in two ways: by adding an extension or by calling
    /// <c>EnableDiagnostic()</c> extension method on container. 
    /// Adding extension to container will work in any build, where <c>EnableDiagnostic()</c>
    /// will only enable it in DEBUG mode. 
    /// </para>
    /// </remarks>
    /// <example>
    /// <code>
    ///     var container = new UnityContainer();
    /// #if DEBUG
    ///     container.AddExtension(new Diagnostic());
    /// #endif
    /// </code>
    /// <code>
    /// var container = new UnityContainer();
    /// container.EnableDiagnostic();
    /// </code>
    /// </example>
    public class Diagnostic : UnityContainerExtension
    {
        protected override void Initialize()
        {
            ((UnityContainer)Container).SetDefaultPolicies = UnityContainer.SetDiagnosticPolicies;
            ((UnityContainer)Container).SetDefaultPolicies((UnityContainer)Container);

            EnumerableResolver.EnumerableMethod = typeof(EnumerableResolver).GetTypeInfo()
                                      .GetDeclaredMethod(nameof(EnumerableResolver.DiagnosticResolver));

            EnumerableResolver.EnumerableFactory = typeof(EnumerableResolver).GetTypeInfo()
                                      .GetDeclaredMethod(nameof(EnumerableResolver.DiagnosticResolverFactory));
        }
    }

    public static class DiagnosticExtensions
    {
        /// <summary>
        /// Enables diagnostic validations on the container built in DEBUG mode.
        /// </summary>
        /// <remarks>
        /// <para>This extension method adds <see cref="Diagnostic"/> extension to the 
        /// container and enables extended validation for all container's operations.</para>
        /// <para>This method will only work if the calling code is built with DEBUG
        /// symbol defined. In other word in you building in Debug mode. Conditional 
        /// methods can not return any values, so fluent notation can not be used with 
        /// this method.</para>
        /// </remarks>
        /// <example>
        /// This is how you could call this method to enable diagnostics:
        /// <code>
        /// var container = new UnityContainer();
        /// container.EnableDebugDiagnostic();
        /// ...
        /// </code>
        /// </example>
        /// <param name="container">The Unity Container instance</param>
        [Conditional("DEBUG")]
        public static void EnableDebugDiagnostic(this UnityContainer container)
        {
            if (null == container) throw new ArgumentNullException(nameof(container));

            container.AddExtension(new Diagnostic());
        }

        /// <summary>
        /// Enables diagnostic validations on the container.
        /// </summary>
        /// <remarks>
        /// <para>This extension method adds <see cref="Diagnostic"/> extension to the 
        /// container and enables extended validation for all container's operations.</para>
        /// <para>This method works regardless of the build mode. In other word, it will 
        /// always enable validation. This method could be used with fluent notation.</para>
        /// </remarks>
        /// <example>
        /// This is how you could call this method to enable diagnostics:
        /// <code>
        /// var container = new UnityContainer().EnableDebugDiagnostic();
        /// ...
        /// </code>
        /// </example>
        /// <param name="container">The Unity Container instance</param>
        /// <returns></returns>
        public static UnityContainer EnableDiagnostic(this UnityContainer container)
        {
            if (null == container) throw new ArgumentNullException(nameof(container));

            container.AddExtension(new Diagnostic());
            return container;
        }
    }

}


================================================
FILE: src/Extensions/ExtensionExtensions.cs
================================================
using System;
using Unity.Extension;

namespace Unity
{
    /// <summary>
    /// Extension class that adds a set of convenience overloads to the
    /// <see cref="IUnityContainer"/> interface.
    /// </summary>
    public static class ExtensionExtensions
    {
        #region Extension management and configuration

        /// <summary>
        /// Add an extension to the container.
        /// </summary>
        /// <param name="extension"><see cref="UnityContainerExtension"/> to add.</param>
        /// <returns>The <see cref="IUnityContainer"/> object that this method was called on (this in C#, Me in Visual Basic).</returns>
        public static IUnityContainer AddExtension(this IUnityContainer container, IUnityContainerExtensionConfigurator extension)
        {
            return ((UnityContainer)container ?? throw new ArgumentNullException(nameof(container))).AddExtension(extension);
        }

        /// <summary>
        /// Resolve access to a configuration interface exposed by an extension.
        /// </summary>
        /// <remarks>Extensions can expose configuration interfaces as well as adding
        /// strategies and policies to the container. This method walks the list of
        /// added extensions and returns the first one that implements the requested type.
        /// </remarks>
        /// <param name="configurationInterface"><see cref="Type"/> of configuration interface required.</param>
        /// <returns>The requested extension's configuration interface, or null if not found.</returns>
        public static object Configure(this IUnityContainer container, Type configurationInterface)
        {
            return ((UnityContainer)container ?? throw new ArgumentNullException(nameof(container))).Configure(configurationInterface);
        }


        /// <summary>
        /// Creates a new extension object and adds it to the container.
        /// </summary>
        /// <typeparam name="TExtension">Type of <see cref="UnityContainerExtension"/> to add. The extension type
        /// will be resolved from within the supplied <paramref name="container"/>.</typeparam>
        /// <param name="container">Container to add the extension to.</param>
        /// <returns>The <see cref="Unity.IUnityContainer"/> object that this method was called on (this in C#, Me in Visual Basic).</returns>
        public static IUnityContainer AddNewExtension<TExtension>(this IUnityContainer container)
            where TExtension : UnityContainerExtension
        {
            TExtension newExtension = (container ?? throw new ArgumentNullException(nameof(container))).Resolve<TExtension>();
            return container.AddExtension(newExtension);
        }

        /// <summary>
        /// Resolve access to a configuration interface exposed by an extension.
        /// </summary>
        /// <remarks>Extensions can expose configuration interfaces as well as adding
        /// strategies and policies to the container. This method walks the list of
        /// added extensions and returns the first one that implements the requested type.
        /// </remarks>
        /// <typeparam name="TConfigurator">The configuration interface required.</typeparam>
        /// <param name="container">Container to configure.</param>
        /// <returns>The requested extension's configuration interface, or null if not found.</returns>
        public static TConfigurator Configure<TConfigurator>(this IUnityContainer container)
            where TConfigurator : IUnityContainerExtensionConfigurator
        {
            return (TConfigurator)(container ?? throw new ArgumentNullException(nameof(container))).Configure(typeof(TConfigurator));
        }

        #endregion
    }
}


================================================
FILE: src/Extensions/Legacy.cs
================================================
using System.Linq;
using Unity.Builder;
using Unity.Processors;
using Unity.Storage;

namespace Unity.Extension
{
    public class Legacy : UnityContainerExtension
    {
        protected override void Initialize()
        {
            var strategies = (StagedStrategyChain<MemberProcessor, BuilderStage>)Context.BuildPlanStrategies;
            var processor = (ConstructorProcessor)strategies.First(s => s is ConstructorProcessor);

            processor.SelectMethod = processor.LegacySelector;
        }
    }
}


================================================
FILE: src/Extensions/Strategies.cs
================================================
using Unity.Extension;
using Unity.Policy;

namespace Unity
{
    /// <summary>
    /// This extension forces the container to only use activated strategies during resolution
    /// </summary>
    /// <remarks>
    /// This extension forces compatibility with systems without support for runtime compilers. 
    /// One of such systems is iOS.
    /// </remarks>
    public class ForceActivation : UnityContainerExtension
    {
        protected override void Initialize()
        {
            var unity = (UnityContainer)Container;

            unity._buildStrategy = unity.ResolvingFactory;
            unity.Defaults.Set(typeof(ResolveDelegateFactory), unity._buildStrategy);
        }
    }

    /// <summary>
    /// This extension forces the container to only use compiled strategies during resolution
    /// </summary>
    public class ForceCompillation : UnityContainerExtension
    {
        protected override void Initialize()
        {
            var unity = (UnityContainer)Container;

            unity._buildStrategy = unity.CompilingFactory;
            unity.Defaults.Set(typeof(ResolveDelegateFactory), unity._buildStrategy);

        }
    }

}


================================================
FILE: src/Factories/DeferredFuncResolverFactory.cs
================================================
using System;
using System.Reflection;
using Unity.Builder;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Factories
{
    internal class DeferredFuncResolverFactory
    {
        private static readonly MethodInfo DeferredResolveMethodInfo
            = typeof(DeferredFuncResolverFactory).GetTypeInfo()
                                                 .GetDeclaredMethod(nameof(DeferredResolve));
        public static ResolveDelegate<BuilderContext> DeferredResolveDelegateFactory(ref BuilderContext context)
        {
            var typeToBuild = context.Type.GetTypeInfo().GenericTypeArguments[0];
            var factoryMethod = DeferredResolveMethodInfo.MakeGenericMethod(typeToBuild);

            return (ResolveDelegate<BuilderContext>)factoryMethod.CreateDelegate(typeof(ResolveDelegate<BuilderContext>)); 
        }

        private static Func<T> DeferredResolve<T>(ref BuilderContext context)
        {
            var nameToBuild = context.Name;
            var container = context.Container;

            return () => (T)container.Resolve<T>(nameToBuild);
        }
    }
}


================================================
FILE: src/Factories/EnumerableResolver.cs
================================================
using System;
using System.Linq;
using System.Reflection;
using Unity.Builder;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Factories
{
    public class EnumerableResolver
    {
        #region Fields

        internal static MethodInfo EnumerableMethod =
            typeof(EnumerableResolver).GetTypeInfo()
                                      .GetDeclaredMethod(nameof(EnumerableResolver.Resolver));

        internal static MethodInfo EnumerableFactory =
            typeof(EnumerableResolver).GetTypeInfo()
                                      .GetDeclaredMethod(nameof(EnumerableResolver.ResolverFactory));

        #endregion


        #region ResolveDelegateFactory

        public static ResolveDelegateFactory Factory = (ref BuilderContext context) =>
        {

#if NETSTANDARD1_0 || NETCOREAPP1_0 || NET40
            var typeArgument = context.Type.GetTypeInfo().GenericTypeArguments.First();
            if (typeArgument.GetTypeInfo().IsGenericType)
#else
            var typeArgument = context.Type.GenericTypeArguments.First();
            if (typeArgument.IsGenericType)
#endif
            {
                return ((EnumerableFactoryDelegate)
                    EnumerableFactory.MakeGenericMethod(typeArgument)
                                     .CreateDelegate(typeof(EnumerableFactoryDelegate)))();
            }
            else
            {
                return (ResolveDelegate<BuilderContext>)
                    EnumerableMethod.MakeGenericMethod(typeArgument)
                                    .CreateDelegate(typeof(ResolveDelegate<BuilderContext>));
            }
        };

        #endregion


        #region Implementation

        private static object Resolver<TElement>(ref BuilderContext context)
        {
            return ((UnityContainer)context.Container).ResolveEnumerable<TElement>(context.Resolve,
                                                                                   context.Name);
        }

        private static ResolveDelegate<BuilderContext> ResolverFactory<TElement>()
        {
            Type type = typeof(TElement).GetGenericTypeDefinition();
            return (ref BuilderContext c) => ((UnityContainer)c.Container).ResolveEnumerable<TElement>(c.Resolve, type, c.Name);
        }


        internal static object DiagnosticResolver<TElement>(ref BuilderContext context)
        {
            return ((UnityContainer)context.Container).ResolveEnumerable<TElement>(context.Resolve,
                                                                                   context.Name).ToArray();
        }

        internal static ResolveDelegate<BuilderContext> DiagnosticResolverFactory<TElement>()
        {
            Type type = typeof(TElement).GetGenericTypeDefinition();
            return (ref BuilderContext c) => ((UnityContainer)c.Container).ResolveEnumerable<TElement>(c.Resolve, type, c.Name).ToArray();
        }

        #endregion


        #region Nested Types

        private delegate ResolveDelegate<BuilderContext> EnumerableFactoryDelegate();

        #endregion
    }
}


================================================
FILE: src/Factories/GenericLazyResolverFactory.cs
================================================
using System;
using System.Reflection;
using Unity.Builder;
using Unity.Lifetime;
using Unity.Resolution;
using Unity.Strategies;

namespace Unity.Factories
{
    /// <summary>
    /// An Resolver Delegate Factory implementation
    /// that constructs a build plan for creating <see cref="Lazy{T}"/> objects.
    /// </summary>
    internal class GenericLazyResolverFactory 
    {
        #region Fields

        private static readonly MethodInfo BuildResolveLazyMethod =
            typeof(GenericLazyResolverFactory).GetTypeInfo()
                .GetDeclaredMethod(nameof(BuildResolveLazy));

        #endregion


        #region ResolveDelegateFactory

        public static ResolveDelegate<BuilderContext> GetResolver(ref BuilderContext context)
        {
            var itemType = context.Type.GetTypeInfo().GenericTypeArguments[0];
            var lazyMethod = BuildResolveLazyMethod.MakeGenericMethod(itemType);

            return (ResolveDelegate<BuilderContext>)lazyMethod.CreateDelegate(typeof(ResolveDelegate<BuilderContext>));
        }

        #endregion


        #region Implementation

        private static object BuildResolveLazy<T>(ref BuilderContext context)
        {
            var container = context.Container;
            var name = context.Name;
            context.Existing = new Lazy<T>(() => container.Resolve<T>(name));

            var lifetime = BuilderStrategy.GetPolicy<LifetimeManager>(ref context);

            if (lifetime is PerResolveLifetimeManager)
            {
                var perBuildLifetime = new InternalPerResolveLifetimeManager(context.Existing);
                context.Set(typeof(LifetimeManager), perBuildLifetime);
            }

            return context.Existing;
        }

        #endregion
    }
}


================================================
FILE: src/Injection/Validating.cs
================================================
using System;
using System.Linq;
using System.Reflection;

namespace Unity.Injection
{
    public static class Validating
    {
        public static Func<Type, InjectionMember, ConstructorInfo> ConstructorSelector =
            (Type type, InjectionMember member) =>
            {
                ConstructorInfo selection = null;
                var ctor = (InjectionMember<ConstructorInfo, object[]>)member;

                if (ctor.IsInitialized) throw new InvalidOperationException("Sharing an InjectionConstructor between registrations is not supported");

                // Select Constructor
                foreach (var info in ctor.DeclaredMembers(type))
                {
                    if (!ctor.Data.MatchMemberInfo(info)) continue;

                    if (null != selection)
                    {
                        throw new ArgumentException(
                            $"Constructor .ctor({ctor.Data.Signature()}) is ambiguous, it could be matched with more than one constructor on type {type?.Name}.");
                    }

                    selection = info;
                }

                // Validate
                if (null != selection) return selection;

                throw new ArgumentException(
                    $"Injected constructor .ctor({ctor.Data.Signature()}) could not be matched with any public constructors on type {type?.Name}.");
            };


        public static Func<Type, InjectionMember, MethodInfo> MethodSelector =
            (Type type, InjectionMember member) =>
            {
                MethodInfo selection = null;
                var method = (InjectionMember<MethodInfo, object[]>)member;

                if (method.IsInitialized) throw new InvalidOperationException("Sharing an InjectionMethod between registrations is not supported");

                // Select Method
                foreach (var info in type.GetDeclaredMethods())
                {
                    if (method.Name != info.Name || !method.Data.MatchMemberInfo(info)) continue;

                    if (null != selection)
                    {
                        throw new ArgumentException(
                            $"Method {method.Name}({method.Data.Signature()}) is ambiguous, it could be matched with more than one method on type {type?.Name}.");
                    }

                    selection = info;
                }

                // Validate
                if (null == selection)
                {
                    throw new ArgumentException(
                        $"Injected method {method.Name}({method.Data.Signature()}) could not be matched with any public methods on type {type?.Name}.");
                }

                if (selection.IsStatic)
                {
                    throw new ArgumentException(
                        $"Static method {method.Name} on type '{selection.DeclaringType.Name}' cannot be injected");
                }

                if (selection.IsPrivate)
                    throw new InvalidOperationException(
                        $"Private method '{method.Name}' on type '{selection.DeclaringType.Name}' cannot be injected");

                if (selection.IsFamily)
                    throw new InvalidOperationException(
                        $"Protected method '{method.Name}' on type '{selection.DeclaringType.Name}' cannot be injected");

                if (selection.IsGenericMethodDefinition)
                {
                    throw new ArgumentException(
                        $"Open generic method {method.Name} on type '{selection.DeclaringType.Name}' cannot be injected");
                }

                var parameters = selection.GetParameters();
                if (parameters.Any(param => param.IsOut))
                {
                    throw new ArgumentException(
                        $"Method {method.Name} on type '{selection.DeclaringType.Name}' cannot be injected. Methods with 'out' parameters are not injectable.");
                }

                if (parameters.Any(param => param.ParameterType.IsByRef))
                {
                    throw new ArgumentException(
                        $"Method {method.Name} on type '{selection.DeclaringType.Name}' cannot be injected. Methods with 'ref' parameters are not injectable.");
                }

                return selection;
            };


        public static Func<Type, InjectionMember, FieldInfo> FieldSelector =
            (Type type, InjectionMember member) =>
            {
                FieldInfo selection = null;
                var field = (InjectionMember<FieldInfo, object>)member;

                if (field.IsInitialized) throw new InvalidOperationException(
                    "Sharing an InjectionField between registrations is not supported");

                // Select Field
                foreach (var info in type.GetDeclaredFields())
                {
                    if (info.Name != field.Name) continue;

                    selection = info;
                    break;
                }

                // Validate
                if (null == selection)
                {
                    throw new ArgumentException(
                        $"Injected field '{field.Name}' could not be matched with any public field on type '{type?.Name}'.");
                }

                if (selection.IsStatic)
                    throw new InvalidOperationException(
                        $"Static field '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (selection.IsInitOnly)
                    throw new InvalidOperationException(
                        $"Readonly field '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (selection.IsPrivate)
                    throw new InvalidOperationException(
                        $"Private field '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (selection.IsFamily)
                    throw new InvalidOperationException(
                        $"Protected field '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (!field.Data.Matches(selection.FieldType))
                    throw new ArgumentException(
                        $"Injected data '{field.Data}' could not be matched with type of field '{selection.FieldType.Name}'.");

                return selection;
            };



        public static Func<Type, InjectionMember, PropertyInfo> PropertySelector =
            (Type type, InjectionMember member) =>
            {
                PropertyInfo selection = null;
                var property = (InjectionMember<PropertyInfo, object>)member;

                if (property.IsInitialized) throw new InvalidOperationException("Sharing an InjectionProperty between registrations is not supported");

                // Select Property
                foreach (var info in type.GetDeclaredProperties())
                {
                    if (info.Name != property.Name) continue;

                    selection = info;
                    break;
                }

                // Validate
                if (null == selection)
                {
                    throw new ArgumentException(
                        $"Injected property '{property.Name}' could not be matched with any property on type '{type?.Name}'.");
                }

                if (!selection.CanWrite)
                    throw new InvalidOperationException(
                        $"Readonly property '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (0 != selection.GetIndexParameters().Length)
                    throw new InvalidOperationException(
                        $"Indexer '{selection.Name}' on type '{type?.Name}' cannot be injected");

                var setter = selection.GetSetMethod(true);

                if (setter.IsStatic)
                    throw new InvalidOperationException(
                        $"Static property '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (setter.IsPrivate)
                    throw new InvalidOperationException(
                        $"Private property '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (setter.IsFamily)
                    throw new InvalidOperationException(
                        $"Protected property '{selection.Name}' on type '{type?.Name}' cannot be injected");

                if (!property.Data.Matches(selection.PropertyType))
                {
                    throw new ArgumentException(
                        $"Injected data '{property.Data}' could not be matched with type of property '{selection.PropertyType.Name}'.");
                }

                return selection;
            };

    }
}


================================================
FILE: src/Legacy/DynamicMethod/DynamicBuildPlanGenerationContext.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.ObjectBuilder.BuildPlan.DynamicMethod
{
    /// <summary>
    /// 
    /// </summary>
    public class DynamicBuildPlanGenerationContext
    {
        private readonly Queue<Expression> _buildPlanExpressions;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="typeToBuild"></param>
        public DynamicBuildPlanGenerationContext(Type typeToBuild)
        {
            TypeToBuild = typeToBuild;
            _buildPlanExpressions = new Queue<Expression>();
        }

        /// <summary>
        /// The type that is to be built with the dynamic build plan.
        /// </summary>
        public Type TypeToBuild { get; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="expression"></param>
        public void AddToBuildPlan(Expression expression)
        {
            _buildPlanExpressions.Enqueue(expression);
        }

        internal ResolveDelegate<BuilderContext> GetBuildMethod()
        {
            var block = Expression.Block(
                _buildPlanExpressions.Concat(new[] { BuilderContextExpression.Existing }));

            var lambda = Expression.Lambda<ResolveDelegate<BuilderContext>>(block,
                BuilderContextExpression.Context);

            var planDelegate = lambda.Compile();

            return (ref BuilderContext context) =>
            {
                try
                {
                    context.Existing = planDelegate(ref context);
                }
                catch (TargetInvocationException e)
                {
                    if (e.InnerException != null) throw e.InnerException;
                    throw;
                }

                return context.Existing;
            };
        }
    }
}


================================================
FILE: src/Legacy/IBuildPlanCreatorPolicy.cs
================================================
using System;
using Unity.Builder;

namespace Unity.Policy
{
    [Obsolete("This interface has been replaced with Unity.Policy.ResolveDelegateFactory delegate", true)]
    public interface IBuildPlanCreatorPolicy 
    {
        /// <summary>
        /// Create a build plan using the given context and build key.
        /// </summary>
        /// <param name="context">Current build context.</param>
        /// <param name="type"></param>
        /// <param name="name"></param>
        /// <returns>The build plan.</returns>
        IBuildPlanPolicy CreatePlan(ref BuilderContext context, Type type, string name);
    }
}


================================================
FILE: src/Legacy/IBuildPlanPolicy.cs
================================================
using System;
using Unity.Builder;

namespace Unity.Policy
{
    [Obsolete("IBuildPlanPolicy has been deprecated, please use ResolveDelegateFactory instead", true)]
    public interface IBuildPlanPolicy
    {
        void BuildUp(ref BuilderContext context);
    }
}


================================================
FILE: src/Legacy/IConstructorSelectorPolicy.cs
================================================
using System;
using System.Reflection;

namespace Unity.Policy
{
    [Obsolete("IConstructorSelectorPolicy has been deprecated, please use ISelect<ConstructorInfo> instead", true)]
    public interface IConstructorSelectorPolicy : ISelect<ConstructorInfo>
    {
    }
}


================================================
FILE: src/Legacy/IMethodSelectorPolicy.cs
================================================
using System;
using System.Collections.Generic;
using System.Reflection;
using Unity.Builder;

namespace Unity.Policy
{
    [Obsolete("IMethodSelectorPolicy has been deprecated, please use ISelectMembers<MethodInfo> instead", true)]
    public interface IMethodSelectorPolicy
    {
        IEnumerable<object> SelectMethods(ref BuilderContext context);
    }
}


================================================
FILE: src/Legacy/IPropertySelectorPolicy.cs
================================================
using System;
using System.Collections.Generic;
using System.Reflection;
using Unity.Builder;

namespace Unity.Policy
{
    [Obsolete("IPropertySelectorPolicy has been deprecated, please use IPropertySelectorPolicy instead", true)]
    public interface IPropertySelectorPolicy : ISelect<PropertyInfo>
    {
        IEnumerable<object> SelectProperties(ref BuilderContext context);
    }
}


================================================
FILE: src/Legacy/InjectionParameterValue.cs
================================================
namespace Unity.Injection
{
    /// <summary>
    /// Base type for objects that are used to configure parameters for
    /// constructor or method injection, or for getting the value to
    /// be injected into a property.
    /// </summary>
    public abstract class Injection_ParameterValue
    {
    }
}


================================================
FILE: src/Legacy/NamedTypeBuildKey.cs
================================================
using System;
using System.Globalization;
using Unity.Policy;

namespace Unity.Builder
{
    /// <summary>
    /// Build key used to combine a type object with a string name. Used by
    /// ObjectBuilder to indicate exactly what is being built.
    /// </summary>
    public class NamedTypeBuildKey
    {
        private readonly int _hash;

        /// <summary>
        /// Create a new <see cref="NamedTypeBuildKey"/> instance with the given
        /// type and name.
        /// </summary>
        /// <param name="type"><see cref="Type"/> to build.</param>
        /// <param name="name">Key to use to look up type mappings and singletons.</param>
        public NamedTypeBuildKey(Type type, string name)
        {
            Type = type;
            Name = !string.IsNullOrEmpty(name) ? name : null;
            _hash = (Type?.GetHashCode() ?? 0 + 37) ^ (Name?.GetHashCode() ?? 0 + 17);
        }

        /// <summary>
        /// Create a new <see cref="NamedTypeBuildKey"/> instance for the default
        /// buildup of the given type.
        /// </summary>
        /// <param name="type"><see cref="Type"/> to build.</param>
        public NamedTypeBuildKey(Type type)
            : this(type, null)
        {
        }

        /// <summary>
        /// This helper method creates a new <see cref="NamedTypeBuildKey"/> instance. It is
        /// initialized for the default key for the given type.
        /// </summary>
        /// <typeparam name="T">Type to build.</typeparam>
        /// <returns>A new <see cref="NamedTypeBuildKey"/> instance.</returns>
        public static NamedTypeBuildKey Make<T>()
        {
            return new NamedTypeBuildKey(typeof(T));
        }

        /// <summary>
        /// This helper method creates a new <see cref="NamedTypeBuildKey"/> instance for
        /// the given type and key.
        /// </summary>
        /// <typeparam name="T">Type to build</typeparam>
        /// <param name="name">Key to use to look up type mappings and singletons.</param>
        /// <returns>A new <see cref="NamedTypeBuildKey"/> instance initialized with the given type and name.</returns>
        public static NamedTypeBuildKey Make<T>(string name)
        {
            return new NamedTypeBuildKey(typeof(T), name);
        }

        /// <summary>
        /// Return the <see cref="Type"/> stored in this build key.
        /// </summary>
        /// <value>The type to build.</value>
        public Type Type { get; }

        /// <summary>
        /// Returns the name stored in this build key.
        /// </summary>
        /// <remarks>The name to use when building.</remarks>
        public string Name { get; }

        /// <summary>
        /// Compare two <see cref="NamedTypeBuildKey"/> instances.
        /// </summary>
        /// <remarks>Two <see cref="NamedTypeBuildKey"/> instances compare equal
        /// if they contain the same name and the same type. Also, comparing
        /// against a different type will also return false.</remarks>
        /// <param name="obj">Object to compare to.</param>
        /// <returns>True if the two keys are equal, false if not.</returns>
        public override bool Equals(object obj)
        {
            return obj is NamedTypeBuildKey namedType && Type == namedType.Type && Name == namedType.Name;
        }

        /// <summary>
        /// Calculate a hash code for this instance.
        /// </summary>
        /// <returns>A hash code.</returns>
        public override int GetHashCode()
        {
            return _hash;
        }

        /// <summary>
        /// Compare two <see cref="NamedTypeBuildKey"/> instances for equality.
        /// </summary>
        /// <remarks>Two <see cref="NamedTypeBuildKey"/> instances compare equal
        /// if they contain the same name and the same type.</remarks>
        /// <param name="left">First of the two keys to compare.</param>
        /// <param name="right">Second of the two keys to compare.</param>
        /// <returns>True if the values of the keys are the same, else false.</returns>
        public static bool operator ==(NamedTypeBuildKey left, NamedTypeBuildKey right)
        {
            return left?._hash == right?._hash &&
                   left?.Type == right?.Type;
        }

        /// <summary>
        /// Compare two <see cref="NamedTypeBuildKey"/> instances for inequality.
        /// </summary>
        /// <remarks>Two <see cref="NamedTypeBuildKey"/> instances compare equal
        /// if they contain the same name and the same type. If either field differs
        /// the keys are not equal.</remarks>
        /// <param name="left">First of the two keys to compare.</param>
        /// <param name="right">Second of the two keys to compare.</param>
        /// <returns>false if the values of the keys are the same, else true.</returns>
        public static bool operator !=(NamedTypeBuildKey left, NamedTypeBuildKey right)
        {
            return !(left == right);
        }

        /// <summary>
        /// Formats the build key as a string (primarily for debugging).
        /// </summary>
        /// <returns>A readable string representation of the build key.</returns>
        public override string ToString()
        {
            return string.Format(CultureInfo.InvariantCulture, "Build Key[{0}, {1}]", Type, Name ?? "null");
        }
    }

    /// <summary>
    /// A generic version of <see cref="NamedTypeBuildKey"/> so that
    /// you can new up a key using generic syntax.
    /// </summary>
    /// <typeparam name="T">Type for the key.</typeparam>
    public class NamedTypeBuildKey<T> : NamedTypeBuildKey
    {
        /// <summary>
        /// Construct a new <see cref="NamedTypeBuildKey{T}"/> that
        /// specifies the given type.
        /// </summary>
        public NamedTypeBuildKey()
            : base(typeof(T), null)
        {
        }

        /// <summary>
        /// Construct a new <see cref="NamedTypeBuildKey{T}"/> that
        /// specifies the given type and name.
        /// </summary>
        /// <param name="name">Name for the key.</param>
        public NamedTypeBuildKey(string name)
            : base(typeof(T), name)
        {
        }
    }
}


================================================
FILE: src/Legacy/TypeBasedOverride.cs
================================================
using System;
using System.Reflection;
using Unity.Policy;

namespace Unity.Resolution
{
    /// <summary>
    /// An implementation of <see cref="ResolverOverride"/> that
    /// acts as a decorator over another <see cref="ResolverOverride"/>.
    /// This checks to see if the current type being built is the
    /// right one before checking the inner <see cref="ResolverOverride"/>.
    /// </summary>
    [Obsolete("This type has been deprecated as degrading performance. Use DependencyOverride instead.", false)]
    public class TypeBasedOverride : ResolverOverride,
                                     IEquatable<ParameterInfo>,
                                     IEquatable<PropertyInfo>
    {
        #region Fields

        private readonly ResolverOverride _innerOverride;

        #endregion


        #region Constructors

        /// <summary>
        /// Create an instance of <see cref="TypeBasedOverride"/>
        /// </summary>
        /// <param name="targetType">Type to check for.</param>
        /// <param name="innerOverride">Inner override to check after type matches.</param>
        public TypeBasedOverride(Type targetType, ResolverOverride innerOverride)
            : base(targetType, null, null)
        {
            _innerOverride = (innerOverride ?? throw new ArgumentNullException(nameof(innerOverride)))
                .OnType(targetType ?? throw new ArgumentNullException(nameof(targetType)));
        }

        #endregion


        #region ResolverOverride

        public override ResolveDelegate<TContext> GetResolver<TContext>(Type type)
        {
            return _innerOverride.GetResolver<TContext>(type);
        }

        #endregion


        #region IEquatable

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            return _innerOverride.Equals(obj);
        }

        public bool Equals(PropertyInfo other)
        {
            return _innerOverride is IEquatable<PropertyInfo> info && 
                   info.Equals(other);
        }

        public bool Equals(ParameterInfo other)
        {
            return _innerOverride is IEquatable<ParameterInfo> info && 
                   info.Equals(other);
        }

        #endregion
    }

    /// <summary>
    /// A convenience version of <see cref="TypeBasedOverride"/> that lets you
    /// specify the type to construct via generics syntax.
    /// </summary>
    /// <typeparam name="T">Type to check for.</typeparam>
    [Obsolete("This type has been deprecated as degrading performance. Use DependencyOverride instead.", false)]
    public class TypeBasedOverride<T> : TypeBasedOverride
    {
        /// <summary>
        /// Create an instance of <see cref="TypeBasedOverride{T}"/>.
        /// </summary>
        /// <param name="innerOverride">Inner override to check after type matches.</param>
        public TypeBasedOverride(ResolverOverride innerOverride)
            : base(typeof(T), innerOverride)
        {
        }
    }
}


================================================
FILE: src/Legacy/TypedInjectionValue.cs
================================================
using System;
using System.Reflection;

namespace Unity.Injection
{
    /// <summary>
    /// A base class for implementing <see cref="ParameterValue"/> classes
    /// that deal in explicit types.
    /// </summary>
    public abstract class Typed_InjectionValue : Injection_ParameterValue
    {
    }
}


================================================
FILE: src/Lifetime/ContainerLifetimeManager.cs
================================================
namespace Unity.Lifetime
{
    /// <summary>
    /// Internal container lifetime manager. 
    /// This manager distinguishes internal registration from user mode registration.
    /// </summary>
    /// <remarks>
    /// Works like the ExternallyControlledLifetimeManager, but uses 
    /// regular instead of weak references
    /// </remarks>
    internal class ContainerLifetimeManager : LifetimeManager, IInstanceLifetimeManager
    {
        public override object GetValue(ILifetimeContainer container = null)
        {
            return container.Container;
        }

        protected override LifetimeManager OnCreateLifetimeManager()
        {
            return new ContainerLifetimeManager();
        }

        public override bool InUse { get => false; set => base.InUse = false; }
    }
}


================================================
FILE: src/Lifetime/InternalPerResolveLifetimeManager.cs
================================================


namespace Unity.Lifetime
{
    /// <summary>
    /// This is a custom lifetime manager that acts like <see cref="TransientLifetimeManager"/>,
    /// but also provides a signal to the default build plan, marking the type so that
    /// instances are reused across the build up object graph.
    /// </summary>
    internal class InternalPerResolveLifetimeManager : PerResolveLifetimeManager
    {
        /// <summary>
        /// Construct a new <see cref="PerResolveLifetimeManager"/> object that stores the
        /// give value. This value will be returned by <see cref="LifetimeManager.GetValue"/>
        /// but is not stored in the lifetime manager, nor is the value disposed.
        /// This WithLifetime manager is intended only for internal use, which is why the
        /// normal <see cref="LifetimeManager.SetValue"/> method is not used here.
        /// </summary>
        /// <param name="value">InjectionParameterValue to store.</param>
        public InternalPerResolveLifetimeManager(object value)
        {
            base.value = value;
            InUse = true;
        }
    }
}


================================================
FILE: src/Lifetime/LifetimeContainer.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace Unity.Lifetime
{
    /// <summary>
    /// Represents a lifetime container.
    /// </summary>
    /// <remarks>
    /// A lifetime container tracks the lifetime of an object, and implements
    /// IDisposable. When the container is disposed, any objects in the
    /// container which implement IDisposable are also disposed.
    /// </remarks>
    public class LifetimeContainer : ILifetimeContainer
    {
        private readonly List<object> _items = new List<object>();

        public LifetimeContainer(IUnityContainer owner = null)
        {
            Container = owner;
        }

        /// <summary>
        /// The IUnityContainer this container is associated with.
        /// </summary>
        /// <value>The <see cref="IUnityContainer"/> object.</value>
        public IUnityContainer Container { get; }


        /// <summary>
        /// Gets the number of references in the lifetime container
        /// </summary>
        /// <value>
        /// The number of references in the lifetime container
        /// </value>
        public int Count
        {
            get
            {
                lock (_items)
                {
                    return _items.Count;
                }
            }
        }

        /// <summary>
        /// Adds an object to the lifetime container.
        /// </summary>
        /// <param name="item">The item to be added to the lifetime container.</param>
        public void Add(object item)
        {
            lock (_items)
            {
                _items.Add(item);
            }
        }

        /// <summary>
        /// Determine if a given object is in the lifetime container.
        /// </summary>
        /// <param name="item">
        /// The item to locate in the lifetime container.
        /// </param>
        /// <returns>
        /// Returns true if the object is contained in the lifetime
        /// container; returns false otherwise.
        /// </returns>
        public bool Contains(object item)
        {
            lock (_items)
            {
                return _items.Contains(item);
            }
        }

        /// <summary>
        /// Releases the resources used by the <see cref="LifetimeContainer"/>. 
        /// </summary>
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this); 
        }

        /// <summary>
        /// Releases the resources used by the <see cref="LifetimeContainer"/>. 
        /// </summary>
        /// <param name="disposing">
        /// true to release managed and unmanaged resources; false to release only unmanaged resources.
        /// </param>
        protected virtual void Dispose(bool disposing)
        {
            if (!disposing) return;

            IDisposable[] disposables;

            lock (_items)
            {
                disposables = _items.OfType<IDisposable>()
                                    .Distinct()
                                    .Reverse()
                                    .ToArray();
                _items.Clear();
            }


            var exceptions = new List<Exception>();
            foreach (var disposable in disposables)
            {
                try
                {
                    disposable.Dispose();
                }
                catch (Exception e)
                {
                    exceptions.Add(e);
                }
            }


            if (exceptions.Count == 1)
            {
                throw exceptions.First();
            }
            else if (exceptions.Count > 1)
            {
                throw new AggregateException(exceptions);
            }
        }

        /// <summary>
        /// Returns an enumerator that iterates through the lifetime container.
        /// </summary>
        /// <returns>
        /// An <see cref="IEnumerator"/> object that can be used to iterate through the life time container. 
        /// </returns>
        public IEnumerator<object> GetEnumerator()
        {
            return _items.GetEnumerator();
        }

        /// <summary>
        /// Returns an enumerator that iterates through the lifetime container.
        /// </summary>
        /// <returns>
        /// An <see cref="IEnumerator"/> object that can be used to iterate through the life time container. 
        /// </returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// Removes an item from the lifetime container. The item is
        /// not disposed.
        /// </summary>
        /// <param name="item">The item to be removed.</param>
        public void Remove(object item)
        {
            lock (_items)
            {
                if (!_items.Contains(item))
                {
                    return;
                }

                _items.Remove(item);
            }
        }
    }
}


================================================
FILE: src/Policy/Converter.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Unity.Policy
{
    public delegate TOutput Converter<in TInput, out TOutput>(TInput input);
}


================================================
FILE: src/Policy/IResolveDelegateFactory.cs
================================================
using Unity.Builder;
using Unity.Resolution;

namespace Unity.Policy
{
    public delegate ResolveDelegate<BuilderContext> ResolveDelegateFactory(ref BuilderContext context);

    public interface IResolveDelegateFactory
    {
        ResolveDelegate<BuilderContext> GetResolver(ref BuilderContext context);
    }
}


================================================
FILE: src/Policy/ISelect.cs
================================================
using System;
using System.Collections.Generic;
using System.Reflection;

namespace Unity.Policy
{
    public interface ISelect<TMemberInfo> where TMemberInfo : MemberInfo
    {
        IEnumerable<object> Select(Type type, IPolicySet registration);
    }
}


================================================
FILE: src/Processors/Abstracts/MemberExpression.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Injection;

namespace Unity.Processors
{
    public abstract partial class MemberProcessor<TMemberInfo, TData> where TMemberInfo : MemberInfo
    {
        #region Selection Processing

        protected virtual IEnumerable<Expression> ExpressionsFromSelection(Type type, IEnumerable<object> members)
        {
            HashSet<TMemberInfo> memberSet = new HashSet<TMemberInfo>();

            foreach (var member in members)
            {
                switch (member)
                {
                    // TMemberInfo
                    case TMemberInfo info:
                        if (!memberSet.Add(info)) continue;
                        object value = DependencyAttribute.Instance; 
                        foreach (var node in AttributeFactories)
                        {
                            var attribute = GetCustomAttribute(info, node.Type);
                            if (null == attribute) continue;

                            value = null == node.Factory ? (object)attribute : node.Factory(attribute, info, null);
                            break;
                        }

                        yield return GetResolverExpression(info, value);
                        break;
                    
                        // Injection Member
                    case InjectionMember<TMemberInfo, TData> injectionMember:
                        var selection = injectionMember.MemberInfo(type);
                        if (!memberSet.Add(selection)) continue;
                        yield return GetResolverExpression(selection, injectionMember.Data);
                        break;

                    // Unknown
                    default:
                        throw new InvalidOperationException($"Unknown MemberInfo<{typeof(TMemberInfo)}> type");
                }
            }
        }

        #endregion


        #region Implementation

        protected abstract Expression GetResolverExpression(TMemberInfo info, object resolver);

        #endregion
    }
}


================================================
FILE: src/Processors/Abstracts/MemberProcessor.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Exceptions;
using Unity.Injection;
using Unity.Policy;
using Unity.Registration;
using Unity.Resolution;

namespace Unity.Processors
{
    public abstract class MemberProcessor
    {
        #region Fields

        protected static readonly MethodInfo StringFormat =
            typeof(string).GetTypeInfo()
                .DeclaredMethods
                .First(m =>
                {
                    var parameters = m.GetParameters();
                    return m.Name == nameof(string.Format) &&
                           m.GetParameters().Length == 2 &&
                           typeof(object) == parameters[1].ParameterType;
                });

        protected static readonly Expression InvalidRegistrationExpression = Expression.New(typeof(InvalidRegistrationException));

        protected static readonly Expression NewGuid = Expression.Call(typeof(Guid).GetTypeInfo().GetDeclaredMethod(nameof(Guid.NewGuid)));

        protected static readonly PropertyInfo DataProperty = typeof(Exception).GetTypeInfo().GetDeclaredProperty(nameof(Exception.Data));

        protected static readonly MethodInfo AddMethod = typeof(IDictionary).GetTypeInfo().GetDeclaredMethod(nameof(IDictionary.Add));

        #endregion


        #region Public Methods

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Call hierarchy:
        /// <see cref="GetExpressions"/>  
        /// + <see cref="SelectMembers"/>
        ///   + <see cref="ExpressionsFromSelected"/>
        ///     + <see cref="BuildMemberExpression"/>
        ///       + <see cref="GetResolverExpression"/>
        /// </remarks>
        /// <param name="type"></param>
        /// <param name="registration"></param>
        /// <returns></returns>
        public abstract IEnumerable<Expression> GetExpressions(Type type, IPolicySet registration);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Call hierarchy:
        /// <see cref="GetResolver"/>
        /// + <see cref="SelectMembers"/>
        ///   + <see cref="ResolversFromSelected"/>
        ///     + <see cref="BuildMemberResolver"/>
        ///       + <see cref="GetResolverDelegate"/>
        /// </remarks>
        /// <param name="type"></param>
        /// <param name="registration"></param>
        /// <param name="seed"></param>
        /// <returns></returns>
        public abstract ResolveDelegate<BuilderContext> GetResolver(Type type, IPolicySet registration, ResolveDelegate<BuilderContext> seed);

        #endregion
    }

    public abstract partial class MemberProcessor<TMemberInfo, TData> : MemberProcessor,
                                                                        ISelect<TMemberInfo>
                                                    where TMemberInfo : MemberInfo
    {
        #region Fields

        private readonly IPolicySet _policySet;
        protected AttributeFactoryNode[] AttributeFactories;

        #endregion


        #region Constructors

        protected MemberProcessor(IPolicySet policySet)
        {
            // Add Unity attribute factories
            AttributeFactories = new[]
            {
                new AttributeFactoryNode(typeof(DependencyAttribute),         (a)=>((DependencyResolutionAttribute)a).Name, DependencyResolverFactory),
                new AttributeFactoryNode(typeof(OptionalDependencyAttribute), (a)=>((DependencyResolutionAttribute)a).Name, OptionalDependencyResolverFactory),
            };

            _policySet = policySet;
        }

        protected MemberProcessor(IPolicySet policySet, Type attribute)
        {
            // Add Unity attribute factories
            AttributeFactories = new[]
            {
                new AttributeFactoryNode(attribute, (a)=>(a as DependencyResolutionAttribute)?.Name, null),
                new AttributeFactoryNode(typeof(DependencyAttribute),         (a)=>((DependencyResolutionAttribute)a).Name, DependencyResolverFactory),
                new AttributeFactoryNode(typeof(OptionalDependencyAttribute), (a)=>((DependencyResolutionAttribute)a).Name, OptionalDependencyResolverFactory),
            };
            _policySet = policySet;
        }

        #endregion


        #region Public Methods

        public void Add(Type type, Func<Attribute, string> getName, Func<Attribute, object, object, ResolveDelegate<BuilderContext>> resolutionFactory)
        {
            for (var i = 0; i < AttributeFactories.Length; i++)
            {
                if (AttributeFactories[i].Type != type) continue;

                AttributeFactories[i].Factory   = resolutionFactory;
                return;
            }

            var factories = new AttributeFactoryNode[AttributeFactories.Length + 1];
            Array.Copy(AttributeFactories, factories, AttributeFactories.Length);
            factories[AttributeFactories.Length] = new AttributeFactoryNode(type, getName, resolutionFactory);
            AttributeFactories = factories;
        }

        #endregion


        #region MemberProcessor

        /// <inheritdoc />
        public override IEnumerable<Expression> GetExpressions(Type type, IPolicySet registration)
        {
            var selector = GetPolicy<ISelect<TMemberInfo>>(registration);
            var members = selector.Select(type, registration);

            return ExpressionsFromSelection(type, members);
        }

        /// <inheritdoc />
        public override ResolveDelegate<BuilderContext> GetResolver(Type type, IPolicySet registration, ResolveDelegate<BuilderContext> seed)
        {
            var selector = GetPolicy<ISelect<TMemberInfo>>(registration);
            var members = selector.Select(type, registration); 
            var resolvers = ResolversFromSelection(type, members).Distinct().ToArray();

            return (ref BuilderContext c) =>
            {
                if (null == (c.Existing = seed(ref c))) return null;
                foreach (var resolver in resolvers) resolver(ref c);
                return c.Existing;
            };
        }

        #endregion


        #region ISelect

        public virtual IEnumerable<object> Select(Type type, IPolicySet registration)
        {
            // Select Injected Members
            if (null != ((InternalRegistration)registration).InjectionMembers)
            {
                foreach (var injectionMember in ((InternalRegistration)registration).InjectionMembers)
                {
                    if (injectionMember is InjectionMember<TMemberInfo, TData>)
                        yield return injectionMember;
                }
            }

            // Select Attributed members
            IEnumerable<TMemberInfo> members = DeclaredMembers(type);

            if (null == members) yield break;
            foreach (var member in members)
            {
                for (var i = 0; i < AttributeFactories.Length; i++)
                {
#if NET40
                    if (!member.IsDefined(AttributeFactories[i].Type, true)) continue;
#else
                    if (!member.IsDefined(AttributeFactories[i].Type)) continue;
#endif
                    yield return member;
                    break;
                }
            }
        }

        #endregion


        #region Implementation

        protected abstract Type MemberType(TMemberInfo info);

        protected abstract IEnumerable<TMemberInfo> DeclaredMembers(Type type);

        protected object PreProcessResolver(TMemberInfo info, object resolver)
        {
            switch (resolver)
            {
                case IResolve policy:
                    return (ResolveDelegate<BuilderContext>)policy.Resolve;

                case IResolverFactory<Type> factory:
                    return factory.GetResolver<BuilderContext>(MemberType(info));

                case Type type:
                    return typeof(Type) == MemberType(info)
                        ? type : (object)info;
            }

            return resolver;
        }

        protected Attribute GetCustomAttribute(TMemberInfo info, Type type)
        {
#if NETSTANDARD1_0 || NETCOREAPP1_0
            return info.GetCustomAttributes()
                       .Where(a => a.GetType()
                                    .GetTypeInfo()
                                    .IsAssignableFrom(type.GetTypeInfo()))
                       .FirstOrDefault();
#elif NET40
            return info.GetCustomAttributes(true)
                       .Cast<Attribute>()
                       .Where(a => a.GetType()
                                    .GetTypeInfo()
                                    .IsAssignableFrom(type.GetTypeInfo()))
                       .FirstOrDefault();
#else
            return info.GetCustomAttribute(type);
#endif
        }

        public TPolicyInterface GetPolicy<TPolicyInterface>(IPolicySet registration)
        {
            return (TPolicyInterface)(registration.Get(typeof(TPolicyInterface)) ??
                                        _policySet.Get(typeof(TPolicyInterface)));
        }

        #endregion


        #region Attribute Resolver Factories

        protected virtual ResolveDelegate<BuilderContext> DependencyResolverFactory(Attribute attribute, object info, object value = null)
        {
            var type = MemberType((TMemberInfo)info);
            return (ref BuilderContext context) => context.Resolve(type, ((DependencyResolutionAttribute)attribute).Name);
        }

        protected virtual ResolveDelegate<BuilderContext> OptionalDependencyResolverFactory(Attribute attribute, object info, object value = null)
        {
            var type = MemberType((TMemberInfo)info);
            return (ref BuilderContext context) =>
            {
                try
                {
                    return context.Resolve(type, ((DependencyResolutionAttribute)attribute).Name);
                }
                catch (Exception ex) 
                when (!(ex.InnerException is CircularDependencyException))
                {
                    return value;
                }
            };
        }

        #endregion


        #region Nested Types

        public struct AttributeFactoryNode
        {
            public readonly Type Type;
            public Func<Attribute, object, object, ResolveDelegate<BuilderContext>> Factory;
            public Func<Attribute, string> Name;

            public AttributeFactoryNode(Type type, Func<Attribute, string> getName, Func<Attribute, object, object, ResolveDelegate<BuilderContext>> factory)
            {
                Type = type;
                Name = getName;
                Factory = factory;
            }
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Abstracts/MemberResolution.cs
================================================
using System;
using System.Collections.Generic;
using System.Reflection;
using Unity.Builder;
using Unity.Injection;
using Unity.Resolution;

namespace Unity.Processors
{
    public abstract partial class MemberProcessor<TMemberInfo, TData> where TMemberInfo : MemberInfo
    {
        #region Selection Processing

        protected virtual IEnumerable<ResolveDelegate<BuilderContext>> ResolversFromSelection(Type type, IEnumerable<object> members)
        {
            HashSet<TMemberInfo> memberSet = new HashSet<TMemberInfo>();

            foreach (var member in members)
            {
                switch (member)
                {
                    // MemberInfo
                    case TMemberInfo info:
                        if (!memberSet.Add(info)) continue;
                        object value = DependencyAttribute.Instance;
                        foreach (var node in AttributeFactories)
                        {
                            var attribute = GetCustomAttribute(info, node.Type);
                            if (null == attribute) continue;

                            value = null == node.Factory ? (object)attribute : node.Factory(attribute, info, null);
                            break;
                        }
                        yield return GetResolverDelegate(info, value);
                        break;

                    // Injection Member
                    case InjectionMember<TMemberInfo, TData> injectionMember:
                        var selection = injectionMember.MemberInfo(type);
                        if (!memberSet.Add(selection)) continue;
                        yield return GetResolverDelegate(selection, injectionMember.Data);
                        break;

                    // Unknown
                    default:
                        throw new InvalidOperationException($"Unknown MemberInfo<{typeof(TMemberInfo)}> type");
                }
            }
        }

        #endregion


        #region Implementation

        protected abstract ResolveDelegate<BuilderContext> GetResolverDelegate(TMemberInfo info, object resolver);

        #endregion
    }
}


================================================
FILE: src/Processors/Constructor/ConstructorDiagnostic.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Lifetime;
using Unity.Exceptions;
using Unity.Policy;
using Unity.Resolution;
using Unity.Registration;
using Unity.Injection;
using System.Text.RegularExpressions;

namespace Unity.Processors
{
    public class ConstructorDiagnostic : ConstructorProcessor
    {
        #region Fields

        const string CannotConstructAbstractClass = "The current type, {0}, is an abstract class and cannot be constructed. Are you missing a type mapping?";
        const string CannotConstructDelegate = "The current type, {0}, is delegate and cannot be constructed. Unity only supports resolving Func&lt;T&gt; and Func&lt;IEnumerable&lt;T&gt;&gt; by default.";
        const string CannotConstructInterface = "The current type, {0}, is an interface and cannot be constructed. Are you missing a type mapping?";
        const string TypeIsNotConstructable = "The type {0} cannot be constructed. You must configure the container to supply this value.";

        private static readonly Expression[] CannotConstructInterfaceExpr = new [] {
            Expression.IfThen(Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                 Expression.Throw(
                    Expression.New(InvalidOperationExceptionCtor,
                        Expression.Call(
                            StringFormat,
                            Expression.Constant(CannotConstructInterface),
                            BuilderContextExpression.Type),
                        InvalidRegistrationExpression)))};

        private static readonly Expression[] CannotConstructAbstractClassExpr = new [] {
            Expression.IfThen(Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                 Expression.Throw(
                    Expression.New(InvalidOperationExceptionCtor,
                        Expression.Call(
                            StringFormat,
                            Expression.Constant(CannotConstructAbstractClass),
                            BuilderContextExpression.Type),
                        InvalidRegistrationExpression)))};

        private static readonly Expression[] CannotConstructDelegateExpr = new [] {
            Expression.IfThen(Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                 Expression.Throw(
                    Expression.New(InvalidOperationExceptionCtor,
                        Expression.Call(
                            StringFormat,
                            Expression.Constant(CannotConstructDelegate),
                            BuilderContextExpression.Type),
                        InvalidRegistrationExpression)))};

        private static readonly Expression[] TypeIsNotConstructableExpr = new [] {
            Expression.IfThen(Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                 Expression.Throw(
                    Expression.New(InvalidOperationExceptionCtor,
                        Expression.Call(
                            StringFormat,
                            Expression.Constant(TypeIsNotConstructable),
                            BuilderContextExpression.Type),
                        InvalidRegistrationExpression)))};

        #endregion


        #region Constructors

        public ConstructorDiagnostic(IPolicySet policySet, UnityContainer container) 
            : base(policySet, container)
        {
        }

        #endregion


        #region Selection

        public override IEnumerable<object> Select(Type type, IPolicySet registration)
        {
            var members = new List<InjectionMember>();

            // Select Injected Members
            if (null != ((InternalRegistration)registration).InjectionMembers)
            {
                foreach (var injectionMember in ((InternalRegistration)registration).InjectionMembers)
                {
                    if (injectionMember is InjectionMember<ConstructorInfo, object[]>)
                    {
                        members.Add(injectionMember);
                    }
                }
            }

            switch (members.Count)
            {
                case 1:
                    return members.ToArray();

                case 0:
                    break;

                default:
                    return new[] { new InvalidOperationException($"Multiple Injection Constructors are registered for Type {type.FullName}", 
                        new InvalidRegistrationException()) };
            }

            // Enumerate to array
            var constructors = DeclaredMembers(type).ToArray();
            if (1 >= constructors.Length)
                return constructors;

            var selection = new HashSet<ConstructorInfo>();

            // Select Attributed constructors
            foreach (var constructor in constructors)
            {
                for (var i = 0; i < AttributeFactories.Length; i++)
                {
#if NET40
                    if (!constructor.IsDefined(AttributeFactories[i].Type, true))
#else
                    if (!constructor.IsDefined(AttributeFactories[i].Type))
#endif
                        continue;

                    selection.Add(constructor);
                }
            }

            switch (selection.Count)
            {
                case 1:
                    return selection.ToArray();

                case 0:
                    break;

                default:
                    return new[] { new InvalidOperationException($"Multiple Constructors are annotated for injection on Type {type.FullName}", 
                        new InvalidRegistrationException()) };
            }

            // Select default
            return new[] { SelectMethod(type, constructors) };
        }

        protected override object SmartSelector(Type type, ConstructorInfo[] constructors)
        {
            Array.Sort(constructors, (a, b) =>
            {
                var qtd = b.GetParameters().Length.CompareTo(a.GetParameters().Length);

                if (qtd == 0)
                {
#if NETSTANDARD1_0 || NETCOREAPP1_0
                    return b.GetParameters().Sum(p => p.ParameterType.GetTypeInfo().IsInterface ? 1 : 0)
                        .CompareTo(a.GetParameters().Sum(p => p.ParameterType.GetTypeInfo().IsInterface ? 1 : 0));
#else
                    return b.GetParameters().Sum(p => p.ParameterType.IsInterface ? 1 : 0)
                        .CompareTo(a.GetParameters().Sum(p => p.ParameterType.IsInterface ? 1 : 0));
#endif
                }
                return qtd;
            });

            int parametersCount = 0;
            ConstructorInfo bestCtor = null;

            foreach (var ctorInfo in constructors)
            {
                var parameters = ctorInfo.GetParameters();

                if (null != bestCtor && parametersCount > parameters.Length) return bestCtor;
                parametersCount = parameters.Length;

#if NET40
                if (parameters.All(p => (null != p.DefaultValue && !(p.DefaultValue is DBNull)) || CanResolve(p)))
#else
                if (parameters.All(p => p.HasDefaultValue || CanResolve(p)))
#endif
                {
                    if (bestCtor == null)
                    {
                        bestCtor = ctorInfo;
                    }
                    else
                    {
                        var message = $"Ambiguous constructor: Failed to choose between {type.Name}{Regex.Match(bestCtor.ToString(), @"\((.*?)\)")} and {type.Name}{Regex.Match(ctorInfo.ToString(), @"\((.*?)\)")}";
                        return new InvalidOperationException(message, new InvalidRegistrationException());
                    }
                }
            }

            if (bestCtor == null)
            {
                return new InvalidOperationException(
                    $"Failed to select a constructor for {type.FullName}", new InvalidRegistrationException());
            }

            return bestCtor;
        }

        #endregion


        #region Expression Overrides

        public override IEnumerable<Expression> GetExpressions(Type type, IPolicySet registration)
        {
#if NETSTANDARD1_0 || NETCOREAPP1_0
            var typeInfo = type.GetTypeInfo();
#else
            var typeInfo = type;
#endif
            // Validate if Type could be created
            if (typeInfo.IsInterface) return CannotConstructInterfaceExpr;

            if (typeInfo.IsAbstract) return CannotConstructAbstractClassExpr;

            if (typeInfo.IsSubclassOf(typeof(Delegate)))
                return CannotConstructDelegateExpr;

            if (type == typeof(string))
                return TypeIsNotConstructableExpr;

            // Build expression as usual
            return base.GetExpressions(type, registration);
        }

        protected override Expression GetResolverExpression(ConstructorInfo info, object resolvers)
        {
            var ex = Expression.Variable(typeof(Exception));
            var exData = Expression.MakeMemberAccess(ex, DataProperty);
            var variable = Expression.Variable(info.DeclaringType ?? throw new ArgumentNullException(nameof(info)));
            var parameters = info.GetParameters();

            // Check if has Out or ByRef parameters
            var tryBlock = parameters.Any(pi => pi.ParameterType.IsByRef)
                
                // Report error
                ? (Expression)Expression.Throw(Expression.New(InvalidOperationExceptionCtor,
                        Expression.Constant(CreateErrorMessage(Error.SelectedConstructorHasRefParameters, info.DeclaringType, info)),
                        InvalidRegistrationExpression))
                
                // Create new instance
                : Expression.Block(new[] { variable }, new Expression[]
                    {
                        Expression.Assign(variable, Expression.New(info, CreateDiagnosticParameterExpressions(info.GetParameters(), resolvers))),
                        Expression.Assign(BuilderContextExpression.Existing, Expression.Convert(variable, typeof(object)))
                    });

            // Add location to dictionary and re-throw
            var catchBlock = Expression.Block(tryBlock.Type,
                Expression.Call(exData, AddMethod,
                        Expression.Convert(NewGuid, typeof(object)),
                        Expression.Constant(info, typeof(object))),
                Expression.Rethrow(tryBlock.Type));

            // Create 
            return Expression.IfThen(Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                                     Expression.TryCatch(tryBlock, Expression.Catch(ex, catchBlock)));
            // Report error
            string CreateErrorMessage(string format, Type type, MethodBase constructor)
            {
                var parameterDescriptions =
                    constructor.GetParameters()
                        .Select(parameter => $"{parameter.ParameterType.FullName} {parameter.Name}");

                return string.Format(format, type.FullName, string.Join(", ", parameterDescriptions));
            }
        }

        #endregion


        #region Resolver Overrides

        public override ResolveDelegate<BuilderContext> GetResolver(Type type, IPolicySet registration, ResolveDelegate<BuilderContext> seed)
        {
#if NETSTANDARD1_0 || NETCOREAPP1_0
            var typeInfo = type.GetTypeInfo();
#else
            var typeInfo = type;
#endif
            // Validate if Type could be created
            if (typeInfo.IsInterface)
            {
                return (ref BuilderContext c) =>
                {
                    if (null == c.Existing)
                        throw new InvalidOperationException(string.Format(CannotConstructInterface, c.Type),
                            new InvalidRegistrationException());

                    return c.Existing;
                };
            }

            if (typeInfo.IsAbstract)
            {
                return (ref BuilderContext c) =>
                {
                    if (null == c.Existing)
                        throw new InvalidOperationException(string.Format(CannotConstructAbstractClass, c.Type),
                            new InvalidRegistrationException());

                    return c.Existing;
                };
            }

            if (typeInfo.IsSubclassOf(typeof(Delegate)))
            {
                return (ref BuilderContext c) =>
                {
                    if (null == c.Existing)
                        throw new InvalidOperationException(string.Format(CannotConstructDelegate, c.Type),
                            new InvalidRegistrationException());

                    return c.Existing;
                };
            }

            if (type == typeof(string))
            {
                return (ref BuilderContext c) =>
                {
                    if (null == c.Existing)
                        throw new InvalidOperationException(string.Format(TypeIsNotConstructable, c.Type),
                            new InvalidRegistrationException());

                    return c.Existing;
                };
            }


            return base.GetResolver(type, registration, seed);
        }

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(ConstructorInfo info, object resolvers)
        {
            var parameterResolvers = CreateDiagnosticParameterResolvers(info.GetParameters(), resolvers).ToArray();

            return (ref BuilderContext c) =>
            {
                if (null == c.Existing)
                {
                    try
                    {
                        var dependencies = new object[parameterResolvers.Length];
                        for (var i = 0; i < dependencies.Length; i++)
                            dependencies[i] = parameterResolvers[i](ref c);

                        c.Existing = info.Invoke(dependencies);
                    }
                    catch (Exception ex)
                    {
                        ex.Data.Add(Guid.NewGuid(), info);
                        throw;
                    }
                }

                return c.Existing;
            };
        }

        protected override ResolveDelegate<BuilderContext> GetPerResolveDelegate(ConstructorInfo info, object resolvers)
        {
            var parameterResolvers = CreateDiagnosticParameterResolvers(info.GetParameters(), resolvers).ToArray();
            // PerResolve lifetime
            return (ref BuilderContext c) =>
            {
                if (null == c.Existing)
                {
                    try
                    {
                        var dependencies = new object[parameterResolvers.Length];
                        for (var i = 0; i < dependencies.Length; i++)
                            dependencies[i] = parameterResolvers[i](ref c);

                        c.Existing = info.Invoke(dependencies);
                    }
                    catch (Exception ex)
                    {
                        ex.Data.Add(Guid.NewGuid(), info);
                        throw;
                    }

                    c.Set(typeof(LifetimeManager),
                          new InternalPerResolveLifetimeManager(c.Existing));
                }

                return c.Existing;
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Constructor/ConstructorExpression.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Exceptions;
using Unity.Injection;
using Unity.Lifetime;
using Unity.Policy;

namespace Unity.Processors
{
    public partial class ConstructorProcessor 
    {
        #region Fields

        protected static readonly ConstructorInfo InvalidOperationExceptionCtor =
            typeof(InvalidOperationException)
                .GetTypeInfo()
                .DeclaredConstructors
                .First(c =>
                {
                    var parameters = c.GetParameters();
                    return 2 == parameters.Length &&
                           typeof(string) == parameters[0].ParameterType &&
                           typeof(Exception) == parameters[1].ParameterType;
                });

        private static readonly ConstructorInfo PerResolveInfo = typeof(InternalPerResolveLifetimeManager)
            .GetTypeInfo().DeclaredConstructors.First();

        protected static readonly Expression SetPerBuildSingletonExpr =
            Expression.Call(BuilderContextExpression.Context, 
                BuilderContextExpression.SetMethod,
                Expression.Constant(typeof(LifetimeManager), typeof(Type)),
                Expression.New(PerResolveInfo, BuilderContextExpression.Existing));

        protected static readonly Expression[] NoConstructorExpr = new [] {
            Expression.IfThen(Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                Expression.Throw(
                    Expression.New(InvalidOperationExceptionCtor,
                        Expression.Call(StringFormat,
                            Expression.Constant("No public constructor is available for type {0}."),
                            BuilderContextExpression.Type),
                        InvalidRegistrationExpression)))};

        #endregion


        #region Overrides

        public override IEnumerable<Expression> GetExpressions(Type type, IPolicySet registration)
        {
            // Select ConstructorInfo
            var selector = GetPolicy<ISelect<ConstructorInfo>>(registration);
            var selection = selector.Select(type, registration)
                                    .FirstOrDefault();

            // Select constructor for the Type
            object[] resolvers = null;
            ConstructorInfo info = null;
            IEnumerable<Expression> parametersExpr;

            switch (selection)
            {
                case ConstructorInfo memberInfo:
                    info = memberInfo;
                    parametersExpr = CreateParameterExpressions(info.GetParameters());
                    break;

                case MethodBase<ConstructorInfo> injectionMember:
                    info = injectionMember.MemberInfo(type);
                    resolvers = injectionMember.Data;
                    parametersExpr = CreateParameterExpressions(info.GetParameters(), resolvers);
                    break;

                case Exception exception:
                    return new[] {Expression.IfThen(
                        Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                        Expression.Throw(Expression.Constant(exception)))};

                default:
                    return NoConstructorExpr;
            }

            // Get lifetime manager
            var lifetimeManager = (LifetimeManager)registration.Get(typeof(LifetimeManager));

            return lifetimeManager is PerResolveLifetimeManager
                ? new[] { GetResolverExpression(info, resolvers), SetPerBuildSingletonExpr }
                : new Expression[] { GetResolverExpression(info, resolvers) };
        }

        protected override Expression GetResolverExpression(ConstructorInfo info, object resolvers)
        {
            try
            {
                var variable = Expression.Variable(info.DeclaringType);
                var parametersExpr = CreateParameterExpressions(info.GetParameters(), resolvers);

                return Expression.IfThen(
                    Expression.Equal(Expression.Constant(null), BuilderContextExpression.Existing),
                    Expression.Block(new[] { variable }, new Expression[]
                    {
                        Expression.Assign(variable, Expression.New(info, parametersExpr)),
                        Expression.Assign(BuilderContextExpression.Existing, Expression.Convert(variable, typeof(object)))
                    }));
            }
            catch (ArgumentException ex)
            {
                throw new InvalidRegistrationException("Invalid Argument", ex);
            }

        }

        #endregion
    }
}


================================================
FILE: src/Processors/Constructor/ConstructorProcessor.cs
================================================
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using Unity.Exceptions;
using Unity.Injection;
using Unity.Policy;
using Unity.Registration;

namespace Unity.Processors
{
    public partial class ConstructorProcessor : ParametersProcessor<ConstructorInfo>
    {
        #region Constructors

        public ConstructorProcessor(IPolicySet policySet, UnityContainer container)
            : base(policySet, typeof(InjectionConstructorAttribute), container)
        {
            SelectMethod = SmartSelector;
        }

        #endregion


        #region Public Properties

        public Func<Type, ConstructorInfo[], object> SelectMethod { get; set; }

        #endregion


        #region Overrides

        public override IEnumerable<object> Select(Type type, IPolicySet registration)
        {
            // Select Injected Members
            if (null != ((InternalRegistration)registration).InjectionMembers)
            {
                foreach (var injectionMember in ((InternalRegistration)registration).InjectionMembers)
                {
                    if (injectionMember is InjectionMember<ConstructorInfo, object[]>)
                    {
                        return new[] { injectionMember };
                    }
                }
            }

            // Enumerate to array
            var constructors = DeclaredMembers(type).ToArray();
            if (1 >= constructors.Length)
                return constructors;

            // Select Attributed constructors
            foreach (var constructor in constructors)
            {
                for (var i = 0; i < AttributeFactories.Length; i++)
                {
#if NET40
                    if (!constructor.IsDefined(AttributeFactories[i].Type, true))
#else
                    if (!constructor.IsDefined(AttributeFactories[i].Type))
#endif
                        continue;

                    return new[] { constructor };
                }
            }

            // Select default
            return new[] { SelectMethod(type, constructors) };
        }

        protected override IEnumerable<ConstructorInfo> DeclaredMembers(Type type)
        {
            return type.GetTypeInfo()
                       .DeclaredConstructors
                       .Where(ctor => !ctor.IsFamily && !ctor.IsPrivate && !ctor.IsStatic);
        }

        #endregion


        #region Implementation                                               

        /// <summary>
        /// Selects default constructor
        /// </summary>
        /// <param name="type"><see cref="Type"/> to be built</param>
        /// <param name="members">All public constructors this type implements</param>
        /// <returns></returns>
        public object LegacySelector(Type type, ConstructorInfo[] members)
        {
            Array.Sort(members, (x, y) => x?.GetParameters().Length ?? 0 - y?.GetParameters().Length ?? 0);

            switch (members.Length)
            {
                case 0:
                    return null;

                case 1:
                    return members[0];

                default:
                    var paramLength = members[0].GetParameters().Length;
                    if (members[1].GetParameters().Length == paramLength)
                    {
                        return new InvalidOperationException(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                "The type {0} has multiple constructors of length {1}. Unable to disambiguate.",
                                type.GetTypeInfo().Name,
                                paramLength), new InvalidRegistrationException());
                    }

#if NETSTANDARD1_0 || NETCOREAPP1_0
                    var typeInfo = type.GetTypeInfo();
#else
                    var typeInfo = type;
#endif
                    // Validate if Type could be created
                    if (typeInfo.IsInterface)
                    {
                        return new InvalidOperationException($"The type {type.GetTypeInfo().Name} is an interface. Unable to create an interface.", 
                                                             new InvalidRegistrationException());
                    }

                    if (typeInfo.IsAbstract)
                    {
                        return new InvalidOperationException($"The type {type.GetTypeInfo().Name} is an abstract class. Unable to create an abstract.",
                                                             new InvalidRegistrationException());
                    }

                    if (typeInfo.IsSubclassOf(typeof(Delegate)))
                    {
                        return new InvalidOperationException($"The type {type.GetTypeInfo().Name} is a delegate. Unable to create a delegate.",
                                                             new InvalidRegistrationException());
                    }

                    if (type == typeof(string))
                    {
                        return new InvalidOperationException($"Unable to create a string",
                                                             new InvalidRegistrationException());
                    }

                    return members[0];
            }
        }

        protected virtual object SmartSelector(Type type, ConstructorInfo[] constructors)
        {
            Array.Sort(constructors, (a, b) =>
            {
                var qtd = b.GetParameters().Length.CompareTo(a.GetParameters().Length);

                if (qtd == 0)
                {
#if NETSTANDARD1_0 || NETCOREAPP1_0
                    return b.GetParameters().Sum(p => p.ParameterType.GetTypeInfo().IsInterface ? 1 : 0)
                        .CompareTo(a.GetParameters().Sum(p => p.ParameterType.GetTypeInfo().IsInterface ? 1 : 0));
#else
                    return b.GetParameters().Sum(p => p.ParameterType.IsInterface ? 1 : 0)
                        .CompareTo(a.GetParameters().Sum(p => p.ParameterType.IsInterface ? 1 : 0));
#endif
                }
                return qtd;
            });

            foreach (var ctorInfo in constructors)
            {
                var parameters = ctorInfo.GetParameters();
#if NET40
                if (parameters.All(p => (null != p.DefaultValue && !(p.DefaultValue is DBNull)) || CanResolve(p)))
#else
                if (parameters.All(p => p.HasDefaultValue || CanResolve(p)))
#endif
                {
                    return ctorInfo;
                }
            }

            return new InvalidOperationException(
                $"Failed to select a constructor for {type.FullName}", new InvalidRegistrationException());
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Constructor/ConstructorResolution.cs
================================================
using System;
using System.Linq;
using System.Reflection;
using Unity.Builder;
using Unity.Exceptions;
using Unity.Injection;
using Unity.Lifetime;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Processors
{
    public partial class ConstructorProcessor 
    {
        #region Overrides

        public override ResolveDelegate<BuilderContext> GetResolver(Type type, IPolicySet registration, ResolveDelegate<BuilderContext> seed)
        {
            // Select ConstructorInfo
            var selector = GetPolicy<ISelect<ConstructorInfo>>(registration);
            var selection = selector.Select(type, registration)
                                    .FirstOrDefault();

            // Select constructor for the Type
            ConstructorInfo info;
            object[] resolvers = null;

            switch (selection)
            {
                case ConstructorInfo memberInfo:
                    info = memberInfo;
                    break;

                case MethodBase<ConstructorInfo> injectionMember:
                    info = injectionMember.MemberInfo(type);
                    resolvers = injectionMember.Data;
                    break;

                case Exception exception:
                    return (ref BuilderContext c) =>
                    {
                        if (null == c.Existing)
                            throw exception;

                        return c.Existing;
                    };

                default:
                    return (ref BuilderContext c) =>
                    {
                        if (null == c.Existing)
                            throw new InvalidOperationException($"No public constructor is available for type {c.Type}.",
                                new InvalidRegistrationException());

                        return c.Existing;
                    };
            }

            // Get lifetime manager
            var lifetimeManager = (LifetimeManager)registration.Get(typeof(LifetimeManager));

            return lifetimeManager is PerResolveLifetimeManager
                ? GetPerResolveDelegate(info, resolvers)
                : GetResolverDelegate(info, resolvers);
        }

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(ConstructorInfo info, object resolvers)
        {
            var parameterResolvers = CreateParameterResolvers(info.GetParameters(), resolvers).ToArray();

            return (ref BuilderContext c) =>
            {
                if (null == c.Existing)
                {
                    var dependencies = new object[parameterResolvers.Length];
                    for (var i = 0; i < dependencies.Length; i++)
                        dependencies[i] = parameterResolvers[i](ref c);
                    
                    c.Existing = info.Invoke(dependencies);
                }

                return c.Existing;
            };
        }

        #endregion


        #region Implementation

        protected virtual ResolveDelegate<BuilderContext> GetPerResolveDelegate(ConstructorInfo info, object resolvers)
        {
            var parameterResolvers = CreateParameterResolvers(info.GetParameters(), resolvers).ToArray();
            // PerResolve lifetime
            return (ref BuilderContext c) =>
            {
                if (null == c.Existing)
                {
                    var dependencies = new object[parameterResolvers.Length];
                    for (var i = 0; i < dependencies.Length; i++)
                        dependencies[i] = parameterResolvers[i](ref c);

                    c.Existing = info.Invoke(dependencies);
                    c.Set(typeof(LifetimeManager),
                          new InternalPerResolveLifetimeManager(c.Existing));
                }

                return c.Existing;
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Fields/FieldDiagnostic.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Injection;
using Unity.Policy;
using Unity.Registration;
using Unity.Resolution;

namespace Unity.Processors
{
    public class FieldDiagnostic : FieldProcessor
    {
        #region Constructors

        public FieldDiagnostic(IPolicySet policySet) : base(policySet)
        {
        }

        #endregion


        #region Overrides

        public override IEnumerable<object> Select(Type type, IPolicySet registration)
        {
            HashSet<object> memberSet = new HashSet<object>();

            // Select Injected Members
            if (null != ((InternalRegistration)registration).InjectionMembers)
            {
                foreach (var injectionMember in ((InternalRegistration)registration).InjectionMembers)
                {
                    if (injectionMember is InjectionMember<FieldInfo, object> && memberSet.Add(injectionMember))
                        yield return injectionMember;
                }
            }

            // Select Attributed members
            foreach (var member in type.GetDeclaredFields())
            {
                for (var i = 0; i < AttributeFactories.Length; i++)
                {
#if NET40
                    if (!member.IsDefined(AttributeFactories[i].Type, true) ||
#else
                    if (!member.IsDefined(AttributeFactories[i].Type) ||
#endif
                        !memberSet.Add(member)) continue;

                    if (member.IsStatic)
                        throw new InvalidOperationException(
                            $"Static field '{member.Name}' on type '{type?.Name}' is marked for injection. Static fields cannot be injected");

                    if (member.IsInitOnly)
                        throw new InvalidOperationException(
                            $"Readonly field '{member.Name}' on type '{type?.Name}' is marked for injection. Readonly fields cannot be injected");

                    if (member.IsPrivate)
                        throw new InvalidOperationException(
                            $"Private field '{member.Name}' on type '{type?.Name}' is marked for injection. Private fields cannot be injected");

                    if (member.IsFamily)
                        throw new InvalidOperationException(
                            $"Protected field '{member.Name}' on type '{type?.Name}' is marked for injection. Protected fields cannot be injected");

                    yield return member;
                    break;
                }
            }
        }

        protected override Expression GetResolverExpression(FieldInfo field, object resolver)
        {
            var ex = Expression.Variable(typeof(Exception));
            var exData = Expression.MakeMemberAccess(ex, DataProperty);
            var block = 
                Expression.Block(field.FieldType,
                    Expression.Call(exData, AddMethod,
                        Expression.Convert(NewGuid, typeof(object)),
                        Expression.Constant(field, typeof(object))),
                Expression.Rethrow(field.FieldType));

            return Expression.TryCatch(base.GetResolverExpression(field, resolver),
                   Expression.Catch(ex, block));
        }

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(FieldInfo info, object resolver)
        {
            var value = PreProcessResolver(info, resolver);
            return (ref BuilderContext context) =>
            {
                try
                {
                    info.SetValue(context.Existing, context.Resolve(info, value));
                    return context.Existing;
                }
                catch (Exception ex)
                {
                    ex.Data.Add(Guid.NewGuid(), info);
                    throw;
                }
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Fields/FieldProcessor.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Processors
{
    public class FieldProcessor : MemberProcessor<FieldInfo, object>
    {
        #region Constructors

        public FieldProcessor(IPolicySet policySet)
            : base(policySet)
        {
        }

        #endregion


        #region Overrides

        protected override IEnumerable<FieldInfo> DeclaredMembers(Type type)
        {
            return type.GetDeclaredFields()
                       .Where(member => !member.IsFamily && !member.IsPrivate &&
                                        !member.IsInitOnly && !member.IsStatic);
        }

        protected override Type MemberType(FieldInfo info) => info.FieldType;

        #endregion


        #region Expression 

        protected override Expression GetResolverExpression(FieldInfo info, object resolver)
        {
            return Expression.Assign(
                Expression.Field(Expression.Convert(BuilderContextExpression.Existing, info.DeclaringType), info),
                Expression.Convert(
                    Expression.Call(BuilderContextExpression.Context,
                        BuilderContextExpression.ResolveFieldMethod,
                        Expression.Constant(info, typeof(FieldInfo)),
                        Expression.Constant(PreProcessResolver(info, resolver), typeof(object))),
                    info.FieldType));
        }

        #endregion


        #region Resolution

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(FieldInfo info, object resolver)
        {
            var value = PreProcessResolver(info, resolver);
            return (ref BuilderContext context) =>
            {
                info.SetValue(context.Existing, context.Resolve(info, value));
                return context.Existing;
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Methods/MethodDiagnostic.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Injection;
using Unity.Policy;
using Unity.Registration;
using Unity.Resolution;

namespace Unity.Processors
{
    public class MethodDiagnostic : MethodProcessor
    {
        #region Constructors

        public MethodDiagnostic(IPolicySet policySet, UnityContainer container) 
            : base(policySet, container)
        {
        }

        #endregion


        #region Overrides

        public override IEnumerable<object> Select(Type type, IPolicySet registration)
        {
            HashSet<object> memberSet = new HashSet<object>();

            // Select Injected Members
            if (null != ((InternalRegistration)registration).InjectionMembers)
            {
                foreach (var injectionMember in ((InternalRegistration)registration).InjectionMembers)
                {
                    if (injectionMember is InjectionMember<MethodInfo, object[]> && memberSet.Add(injectionMember))
                        yield return injectionMember;
                }
            }

            // Select Attributed members
            foreach (var member in type.GetDeclaredMethods())
            {
                for (var i = 0; i < AttributeFactories.Length; i++)
                {
#if NET40
                    if (!member.IsDefined(AttributeFactories[i].Type, true) ||
#else
                    if (!member.IsDefined(AttributeFactories[i].Type) ||
#endif
                        !memberSet.Add(member)) continue;

                    // Validate
                    if (member.IsStatic)
                    {
                        throw new ArgumentException(
                            $"Static method {member.Name} on type '{member.DeclaringType.Name}' is marked for injection. Static methods cannot be injected");
                    }

                    if (member.IsPrivate)
                        throw new InvalidOperationException(
                            $"Private method '{member.Name}' on type '{member.DeclaringType.Name}' is marked for injection. Private methods cannot be injected");

                    if (member.IsFamily)
                        throw new InvalidOperationException(
                            $"Protected method '{member.Name}' on type '{member.DeclaringType.Name}' is marked for injection. Protected methods cannot be injected");

                    if (member.IsGenericMethodDefinition)
                    {
                        throw new ArgumentException(
                            $"Open generic method {member.Name} on type '{member.DeclaringType.Name}' is marked for injection. Open generic methods cannot be injected.");
                    }

                    var parameters = member.GetParameters();
                    if (parameters.Any(param => param.IsOut))
                    {
                        throw new ArgumentException(
                            $"Method {member.Name} on type '{member.DeclaringType.Name}' is marked for injection. Methods with 'out' parameters cannot be injected.");
                    }

                    if (parameters.Any(param => param.ParameterType.IsByRef))
                    {
                        throw new ArgumentException(
                            $"Method {member.Name} on type '{member.DeclaringType.Name}' is marked for injection. Methods with 'ref' parameters cannot be injected.");
                    }

                    yield return member;
                    break;
                }
            }
        }

        protected override Expression GetResolverExpression(MethodInfo info, object resolvers)
        {
            var ex = Expression.Variable(typeof(Exception));
            var exData = Expression.MakeMemberAccess(ex, DataProperty);
            var block = Expression.Block(typeof(void),
                Expression.Call(exData, AddMethod,
                        Expression.Convert(NewGuid, typeof(object)),
                        Expression.Constant(info, typeof(object))),
                Expression.Rethrow(typeof(void)));

            return 
                Expression.TryCatch(
                    Expression.Call(
                        Expression.Convert(BuilderContextExpression.Existing, info.DeclaringType),
                        info, CreateDiagnosticParameterExpressions(info.GetParameters(), resolvers)),
                Expression.Catch(ex, block));
        }

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(MethodInfo info, object resolvers)
        {
            var parameterResolvers = CreateDiagnosticParameterResolvers(info.GetParameters(), resolvers).ToArray();
            return (ref BuilderContext c) =>
            {
                try
                {
                    if (null == c.Existing) return c.Existing;

                    var parameters = new object[parameterResolvers.Length];
                    for (var i = 0; i < parameters.Length; i++)
                        parameters[i] = parameterResolvers[i](ref c);

                    info.Invoke(c.Existing, parameters);
                }
                catch (Exception ex)
                {
                    ex.Data.Add(Guid.NewGuid(), info);
                    throw;
                }

                return c.Existing;
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Methods/MethodProcessor.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Exceptions;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Processors
{
    public class MethodProcessor : ParametersProcessor<MethodInfo>
    {
        #region Constructors

        public MethodProcessor(IPolicySet policySet, UnityContainer container)
            : base(policySet, typeof(InjectionMethodAttribute), container)
        {
        }

        #endregion


        #region Selection

        protected override IEnumerable<MethodInfo> DeclaredMembers(Type type)
        {
            return type.GetDeclaredMethods()
                       .Where(member => !member.IsFamily && 
                                        !member.IsPrivate && 
                                        !member.IsStatic);
        }

        #endregion


        #region Expression 

        protected override Expression GetResolverExpression(MethodInfo info, object resolvers)
        {
            try
            {
                return Expression.Call(
                    Expression.Convert(BuilderContextExpression.Existing, info.DeclaringType),
                    info, CreateParameterExpressions(info.GetParameters(), resolvers));
            }
            catch (ArgumentException ex)
            {
                throw new InvalidRegistrationException("Invalid Argument", ex);
            }
        }

        #endregion


        #region Resolution

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(MethodInfo info, object resolvers)
        {
            var parameterResolvers = CreateParameterResolvers(info.GetParameters(), resolvers).ToArray();
            return (ref BuilderContext c) =>
            {
                if (null == c.Existing) return c.Existing;

                var parameters = new object[parameterResolvers.Length];
                for (var i = 0; i < parameters.Length; i++)
                    parameters[i] = parameterResolvers[i](ref c);

                info.Invoke(c.Existing, parameters);

                return c.Existing;
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Parameters/ParametersDiagnostic.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Resolution;

namespace Unity.Processors
{
    public abstract partial class ParametersProcessor<TMemberInfo>
    {
        #region Diagnostic Parameter Factories

        protected virtual IEnumerable<Expression> CreateDiagnosticParameterExpressions(ParameterInfo[] parameters, object injectors = null)
        {
            object[] resolvers = null != injectors && injectors is object[] array && 0 != array.Length ? array : null;
            for (var i = 0; i < parameters.Length; i++)
            {
                var parameter = parameters[i];
                var resolver = null == resolvers
                             ? FromAttribute(parameter)
                             : PreProcessResolver(parameter, resolvers[i]);

                // Check if has default value

#if NET40
                Expression defaultValueExpr = null;
                if (parameter.DefaultValue is DBNull)
#else
                var defaultValueExpr = parameter.HasDefaultValue
                    ? Expression.Constant(parameter.DefaultValue, parameter.ParameterType)
                    : null;

                if (!parameter.HasDefaultValue)
#endif
                {
                    var ex = Expression.Variable(typeof(Exception));
                    var exData = Expression.MakeMemberAccess(ex, DataProperty);
                    var block = Expression.Block(parameter.ParameterType,
                        Expression.Call(exData, AddMethod,
                                Expression.Convert(NewGuid, typeof(object)),
                                Expression.Constant(parameter, typeof(object))),
                        Expression.Rethrow(parameter.ParameterType));

                    var tryBlock = Expression.Convert(
                                    Expression.Call(BuilderContextExpression.Context,
                                        BuilderContextExpression.ResolveParameterMethod,
                                        Expression.Constant(parameter, typeof(ParameterInfo)),
                                        Expression.Constant(resolver, typeof(object))),
                                    parameter.ParameterType);

                    yield return Expression.TryCatch(tryBlock, Expression.Catch(ex, block));
                }
                else
                {
                    var variable = Expression.Variable(parameter.ParameterType);
                    var resolve = Expression.Convert(
                                    Expression.Call(BuilderContextExpression.Context,
                                        BuilderContextExpression.ResolveParameterMethod,
                                        Expression.Constant(parameter, typeof(ParameterInfo)),
                                        Expression.Constant(resolver, typeof(object))),
                                    parameter.ParameterType);

                    yield return Expression.Block(new[] { variable }, new Expression[]
                    {
                        Expression.TryCatch(
                            Expression.Assign(variable, resolve),
                        Expression.Catch(typeof(Exception),
                            Expression.Assign(variable, defaultValueExpr))),
                        variable
                    });
                }
            }
        }

        protected virtual IEnumerable<ResolveDelegate<BuilderContext>> CreateDiagnosticParameterResolvers(ParameterInfo[] parameters, object injectors = null)
        {
            object[] resolvers = null != injectors && injectors is object[] array && 0 != array.Length ? array : null;
            for (var i = 0; i < parameters.Length; i++)
            {
                var parameter = parameters[i];
                var resolver = null == resolvers
                             ? FromAttribute(parameter)
                             : PreProcessResolver(parameter, resolvers[i]);

                // TODO: Add diagnostic for parameters

                // Check if has default value
#if NET40
                if (parameter.DefaultValue is DBNull)
#else
                if (!parameter.HasDefaultValue)
#endif
                {
                    // Plain vanilla case
                    yield return (ref BuilderContext context) =>
                    {
                        try
                        {
                            return context.Resolve(parameter, resolver);
                        }
                        catch (Exception ex)
                        {
                            ex.Data.Add(Guid.NewGuid(), parameter);
                            throw;
                        }
                    };
                }
                else
                {
                    // Check if has default value
#if NET40
                    var defaultValue = !(parameter.DefaultValue is DBNull) ? parameter.DefaultValue : null;
#else
                    var defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null;
#endif
                    yield return (ref BuilderContext context) =>
                    {
                        try
                        {
                            return context.Resolve(parameter, resolver);
                        }
                        catch
                        {
                            return defaultValue;
                        }
                    };
                }
            }
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Parameters/ParametersProcessor.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Exceptions;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Processors
{
    public abstract partial class ParametersProcessor<TMemberInfo> : MemberProcessor<TMemberInfo, object[]>
                                                 where TMemberInfo : MethodBase
    {
        #region Fields

        protected readonly UnityContainer Container;
        private static readonly TypeInfo DelegateType = typeof(Delegate).GetTypeInfo();

        #endregion



        #region Constructors

        protected ParametersProcessor(IPolicySet policySet, Type attribute, UnityContainer container)
            : base(policySet, attribute)
        {
            Container = container;
        }

        #endregion


        #region Overrides

        protected override Type MemberType(TMemberInfo info) => info.DeclaringType;

        #endregion


        #region Expression 

        protected virtual IEnumerable<Expression> CreateParameterExpressions(ParameterInfo[] parameters, object injectors = null)
        {
            object[] resolvers = null != injectors && injectors is object[] array && 0 != array.Length ? array : null;
            for (var i = 0; i < parameters.Length; i++)
            {
                var parameter = parameters[i];
                var resolver = null == resolvers
                             ? FromAttribute(parameter)
                             : PreProcessResolver(parameter, resolvers[i]);

                // Check if has default value
#if NET40
                var defaultValueExpr = parameter.DefaultValue is DBNull
                    ? Expression.Constant(parameter.DefaultValue, parameter.ParameterType)
                    : null;

                if (parameter.DefaultValue is DBNull)
#else
                var defaultValueExpr = parameter.HasDefaultValue
                    ? Expression.Constant(parameter.DefaultValue, parameter.ParameterType)
                    : null;

                if (!parameter.HasDefaultValue)
#endif
                {
                    // Plain vanilla case
                    yield return Expression.Convert(
                                    Expression.Call(BuilderContextExpression.Context,
                                        BuilderContextExpression.ResolveParameterMethod,
                                        Expression.Constant(parameter, typeof(ParameterInfo)),
                                        Expression.Constant(resolver, typeof(object))),
                                    parameter.ParameterType);
                }
                else
                {
                    var variable = Expression.Variable(parameter.ParameterType);
                    var resolve = Expression.Convert(
                                    Expression.Call(BuilderContextExpression.Context,
                                        BuilderContextExpression.ResolveParameterMethod,
                                        Expression.Constant(parameter, typeof(ParameterInfo)),
                                        Expression.Constant(resolver, typeof(object))),
                                    parameter.ParameterType);

                    yield return Expression.Block(new[] { variable }, new Expression[]
                    {
                        Expression.TryCatch(
                            Expression.Assign(variable, resolve),
                        Expression.Catch(typeof(Exception),
                            Expression.Assign(variable, defaultValueExpr))),
                        variable
                    });
                }
            }
        }

        #endregion


        #region Resolution

        protected virtual IEnumerable<ResolveDelegate<BuilderContext>> CreateParameterResolvers(ParameterInfo[] parameters, object injectors = null)
        {
            object[] resolvers = null != injectors && injectors is object[] array && 0 != array.Length ? array : null;
            for (var i = 0; i < parameters.Length; i++)
            {
                var parameter = parameters[i];
                var resolver = null == resolvers
                             ? FromAttribute(parameter)
                             : PreProcessResolver(parameter, resolvers[i]);
#if NET40
                if (parameter.DefaultValue is DBNull)
#else
                if (!parameter.HasDefaultValue)
#endif
                {
                    // Plain vanilla case
                    yield return (ref BuilderContext context) => context.Resolve(parameter, resolver);
                }
                else
                {
                    // Check if has default value
#if NET40
                    var defaultValue = !(parameter.DefaultValue is DBNull) ? parameter.DefaultValue : null;
#else
                    var defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null;
#endif
                    yield return (ref BuilderContext context) =>
                    {
                        try
                        {
                            return context.Resolve(parameter, resolver);
                        }
                        catch
                        {
                            return defaultValue;
                        }
                    };
                }
            }
        }

        #endregion


        #region Implementation

        private object PreProcessResolver(ParameterInfo parameter, object resolver)
        {
            switch (resolver)
            {
                case IResolve policy:
                    return (ResolveDelegate<BuilderContext>)policy.Resolve;

                case IResolverFactory<ParameterInfo> factory:
                    return factory.GetResolver<BuilderContext>(parameter);

                case Type type:
                    return 
                        typeof(Type) == parameter.ParameterType
                          ? type 
                          : type == parameter.ParameterType 
                              ? FromAttribute(parameter) 
                              : FromType(type);
            }

            return resolver;
        }

        private object FromType(Type type)
        {
            return (ResolveDelegate<BuilderContext>)((ref BuilderContext context) => context.Resolve(type, null));
        }

        private object FromAttribute(ParameterInfo info)
        {
#if NET40
            var defaultValue = !(info.DefaultValue is DBNull) ? info.DefaultValue : null;
#else
            var defaultValue = info.HasDefaultValue ? info.DefaultValue : null;
#endif
            foreach (var node in AttributeFactories)
            {
                if (null == node.Factory) continue;
                var attribute = info.GetCustomAttribute(node.Type);
                if (null == attribute) continue;

                // If found match, use provided factory to create expression
                return node.Factory(attribute, info, defaultValue);
            }

            return info;
        }

        protected bool CanResolve(ParameterInfo info)
        {
            foreach (var node in AttributeFactories)
            {
                if (null == node.Factory) continue;
                var attribute = info.GetCustomAttribute(node.Type);
                if (null == attribute) continue;

                // If found match, use provided factory to create expression
                return CanResolve(info.ParameterType, node.Name(attribute));
            }

            return CanResolve(info.ParameterType, null);
        }

        protected bool CanResolve(Type type, string name)
        {
#if NETSTANDARD1_0 || NETCOREAPP1_0
            var info = type.GetTypeInfo();
#else
            var info = type;
#endif
            if (info.IsClass)
            {
                // Array could be either registered or Type can be resolved
                if (type.IsArray)
                {
                    return Container._isExplicitlyRegistered(type, name) || CanResolve(type.GetElementType(), name);
                }

                // Type must be registered if:
                // - String
                // - Enumeration
                // - Primitive
                // - Abstract
                // - Interface
                // - No accessible constructor
                if (DelegateType.IsAssignableFrom(info) ||
                    typeof(string) == type || info.IsEnum || info.IsPrimitive || info.IsAbstract
#if NETSTANDARD1_0 || NETCOREAPP1_0
                    || !info.DeclaredConstructors.Any(c => !c.IsFamily && !c.IsPrivate))
#else
                    || !type.GetTypeInfo().DeclaredConstructors.Any(c => !c.IsFamily && !c.IsPrivate))
#endif
                    return Container._isExplicitlyRegistered(type, name);

                return true;
            }

            // Can resolve if IEnumerable or factory is registered
            if (info.IsGenericType)
            {
                var genericType = type.GetGenericTypeDefinition();

                if (genericType == typeof(IEnumerable<>) || Container._isExplicitlyRegistered(genericType, name))
                {
                    return true;
                }
            }

            // Check if Type is registered
            return Container._isExplicitlyRegistered(type, name);
        }


        #endregion


        #region Attribute Factories

        protected override ResolveDelegate<BuilderContext> DependencyResolverFactory(Attribute attribute, object info, object value = null)
        {
            return (ref BuilderContext context) => context.Resolve(((ParameterInfo)info).ParameterType, ((DependencyResolutionAttribute)attribute).Name);
        }

        protected override ResolveDelegate<BuilderContext> OptionalDependencyResolverFactory(Attribute attribute, object info, object value = null)
        {
            return (ref BuilderContext context) =>
            {
                try
                {
                    return context.Resolve(((ParameterInfo)info).ParameterType, ((DependencyResolutionAttribute)attribute).Name);
                }
                catch (Exception ex) 
                when (!(ex.InnerException is CircularDependencyException))
                {
                    return value;
                }
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Properties/PropertyDiagnostic.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Injection;
using Unity.Policy;
using Unity.Registration;
using Unity.Resolution;

namespace Unity.Processors
{
    public class PropertyDiagnostic : PropertyProcessor
    {
        #region Constructors

        public PropertyDiagnostic(IPolicySet policySet) 
            : base(policySet)
        {
        }

        #endregion


        #region Overrides

        public override IEnumerable<object> Select(Type type, IPolicySet registration)
        {
            HashSet<object> memberSet = new HashSet<object>();

            // Select Injected Members
            if (null != ((InternalRegistration)registration).InjectionMembers)
            {
                foreach (var injectionMember in ((InternalRegistration)registration).InjectionMembers)
                {
                    if (injectionMember is InjectionMember<PropertyInfo, object> && memberSet.Add(injectionMember))
                        yield return injectionMember;
                }
            }

            // Select Attributed members
            foreach (var member in type.GetDeclaredProperties())
            {
                for (var i = 0; i < AttributeFactories.Length; i++)
                {
#if NET40
                    if (!member.IsDefined(AttributeFactories[i].Type, true) ||
#else
                    if (!member.IsDefined(AttributeFactories[i].Type) ||
#endif
                        !memberSet.Add(member)) continue;

                    if (!member.CanWrite)
                        throw new InvalidOperationException(
                            $"Readonly property '{member.Name}' on type '{type?.Name}' is marked for injection. Readonly properties cannot be injected");

                    if (0 != member.GetIndexParameters().Length)
                        throw new InvalidOperationException(
                            $"Indexer '{member.Name}' on type '{type?.Name}' is marked for injection. Indexers cannot be injected");

                    var setter = member.GetSetMethod(true);
                    if (setter.IsStatic)
                        throw new InvalidOperationException(
                            $"Static property '{member.Name}' on type '{type?.Name}' is marked for injection. Static properties cannot be injected");

                    if (setter.IsPrivate)
                        throw new InvalidOperationException(
                            $"Private property '{member.Name}' on type '{type?.Name}' is marked for injection. Private properties cannot be injected");

                    if (setter.IsFamily)
                        throw new InvalidOperationException(
                            $"Protected property '{member.Name}' on type '{type?.Name}' is marked for injection. Protected properties cannot be injected");

                    yield return member;
                    break;
                }
            }
        }

        protected override Expression GetResolverExpression(PropertyInfo property, object resolver)
        {
            var ex = Expression.Variable(typeof(Exception));
            var exData = Expression.MakeMemberAccess(ex, DataProperty);
            var block = 
                Expression.Block(property.PropertyType,
                    Expression.Call(exData, AddMethod,
                        Expression.Convert(NewGuid, typeof(object)),
                        Expression.Constant(property, typeof(object))),
                Expression.Rethrow(property.PropertyType));

            return Expression.TryCatch(base.GetResolverExpression(property, resolver),
                   Expression.Catch(ex, block));
        }

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(PropertyInfo info, object resolver)
        {
            var value = PreProcessResolver(info, resolver);
            return (ref BuilderContext context) =>
            {
                try
                {
#if NET40
                    info.SetValue(context.Existing, context.Resolve(info, value), null);
#else
                    info.SetValue(context.Existing, context.Resolve(info, value));
#endif
                    return context.Existing;
                }
                catch (Exception ex)
                {
                    ex.Data.Add(Guid.NewGuid(), info);
                    throw;
                }
            };
        }

        #endregion
    }
}


================================================
FILE: src/Processors/Properties/PropertyProcessor.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using Unity.Builder;
using Unity.Policy;
using Unity.Resolution;

namespace Unity.Processors
{
    public class PropertyProcessor : MemberProcessor<PropertyInfo, object>
    {
        #region Constructors

        public PropertyProcessor(IPolicySet policySet)
            : base(policySet)
        {
        }

        #endregion


        #region Overrides

        protected override Type MemberType(PropertyInfo info) => info.PropertyType;

        protected override IEnumerable<PropertyInfo> DeclaredMembers(Type type)
        {
            foreach (var member in type.GetDeclaredProperties())
            {
                if (!member.CanWrite || 0 != member.GetIndexParameters().Length)
                    continue;

                var setter = member.GetSetMethod(true);
                if (setter.IsPrivate || setter.IsFamily)
                    continue;

                yield return member;
            }
        }

        #endregion


        #region Expression 

        protected override Expression GetResolverExpression(PropertyInfo info, object resolver)
        {
            return Expression.Assign(
                Expression.Property(Expression.Convert(BuilderContextExpression.Existing, info.DeclaringType), info),
                Expression.Convert(
                    Expression.Call(BuilderContextExpression.Context,
                        BuilderContextExpression.ResolvePropertyMethod,
                        Expression.Constant(info, typeof(PropertyInfo)),
                        Expression.Constant(PreProcessResolver(info, resolver), typeof(object))),
                    info.PropertyType));
        }

        #endregion


        #region Resolution

        protected override ResolveDelegate<BuilderContext> GetResolverDelegate(PropertyInfo info, object resolver)
        {
            var value = PreProcessResolver(info, resolver);
            return (ref BuilderContext context) =>
            {
#if NET40
                info.SetValue(context.Existing, context.Resolve(info, value), null);
#else
                info.SetValue(context.Existing, context.Resolve(info, value));
#endif
                return context.Existing;
            };
        }

        #endregion
    }
}


================================================
FILE: src/Properties/AssemblyInfo.cs
================================================
using System;
using System.Runtime.CompilerServices;
using System.Security;

[assembly: CLSCompliant(true)]
[assembly: AllowPartiallyTrustedCallers]


[assembly: InternalsVisibleTo("Unity.Microsoft.DependencyInjection, PublicKey=" +
                              "002400000480000094000000060200000024000052534131000400000100010037b16015885a7a" +
                              "c3c63f3c10b23972ec0dfd6db643eaef45ea2297bdfdc53b1945017fc76fd038dc6e7bf9190024" +
                              "d5435fa49630fdfd143e3149a1506b895fbcce017df1d4f0eac6f05f6d257be45c7be9a8aa8d3d" +
                              "4164892dc75e7c379a22da0d986db393fbd09e4ba42398c80a305361553ef90eb3484d9cf12df9" +
                              "0fc0e6e3")]


================================================
FILE: src/Registration/ContainerRegistration.cs
================================================
using System;
using System.Diagnostics;
using Unity.Injection;
using Unity.Lifetime;
using Unity.Storage;

namespace Unity.Registration
{
    [DebuggerDisplay("ContainerRegistration: MappedTo={Type?.Name ?? string.Empty},    {LifetimeManager?.GetType()?.Name}")]
    public class ContainerRegistration : InternalRegistration
    {
        #region 
Download .txt
gitextract_ldynwt33/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   └── workflows/
│       └── regression.yml
├── .gitignore
├── LICENSE
├── README.md
├── appveyor.yml
├── codecov.yml
├── package.props
├── package.sln
├── src/
│   ├── Builder/
│   │   ├── Context/
│   │   │   ├── BuilderContext.cs
│   │   │   └── BuilderContextExpression.cs
│   │   └── Stages/
│   │       ├── BuilderStage.cs
│   │       ├── SelectionStage.cs
│   │       └── UnityBuildStage.cs
│   ├── Events/
│   │   ├── ChildContainerCreatedEventArgs.cs
│   │   ├── NamedEventArgs.cs
│   │   ├── RegisterEventArgs.cs
│   │   └── RegisterInstanceEventArgs.cs
│   ├── Exceptions/
│   │   ├── DependencyMissingException.cs
│   │   ├── IllegalInjectionMethodException.Desktop.cs
│   │   ├── IllegalInjectionMethodException.cs
│   │   ├── InvalidRegistrationException.cs
│   │   └── MakeGenericTypeFailedException.cs
│   ├── Extension/
│   │   ├── ExtensionContext.cs
│   │   ├── IUnityContainerExtensionConfigurator.cs
│   │   └── UnityContainerExtension.cs
│   ├── Extensions/
│   │   ├── DefaultLifetime.cs
│   │   ├── Diagnostic.cs
│   │   ├── ExtensionExtensions.cs
│   │   ├── Legacy.cs
│   │   └── Strategies.cs
│   ├── Factories/
│   │   ├── DeferredFuncResolverFactory.cs
│   │   ├── EnumerableResolver.cs
│   │   └── GenericLazyResolverFactory.cs
│   ├── Injection/
│   │   └── Validating.cs
│   ├── Legacy/
│   │   ├── DynamicMethod/
│   │   │   └── DynamicBuildPlanGenerationContext.cs
│   │   ├── IBuildPlanCreatorPolicy.cs
│   │   ├── IBuildPlanPolicy.cs
│   │   ├── IConstructorSelectorPolicy.cs
│   │   ├── IMethodSelectorPolicy.cs
│   │   ├── IPropertySelectorPolicy.cs
│   │   ├── InjectionParameterValue.cs
│   │   ├── NamedTypeBuildKey.cs
│   │   ├── TypeBasedOverride.cs
│   │   └── TypedInjectionValue.cs
│   ├── Lifetime/
│   │   ├── ContainerLifetimeManager.cs
│   │   ├── InternalPerResolveLifetimeManager.cs
│   │   └── LifetimeContainer.cs
│   ├── Policy/
│   │   ├── Converter.cs
│   │   ├── IResolveDelegateFactory.cs
│   │   └── ISelect.cs
│   ├── Processors/
│   │   ├── Abstracts/
│   │   │   ├── MemberExpression.cs
│   │   │   ├── MemberProcessor.cs
│   │   │   └── MemberResolution.cs
│   │   ├── Constructor/
│   │   │   ├── ConstructorDiagnostic.cs
│   │   │   ├── ConstructorExpression.cs
│   │   │   ├── ConstructorProcessor.cs
│   │   │   └── ConstructorResolution.cs
│   │   ├── Fields/
│   │   │   ├── FieldDiagnostic.cs
│   │   │   └── FieldProcessor.cs
│   │   ├── Methods/
│   │   │   ├── MethodDiagnostic.cs
│   │   │   └── MethodProcessor.cs
│   │   ├── Parameters/
│   │   │   ├── ParametersDiagnostic.cs
│   │   │   └── ParametersProcessor.cs
│   │   └── Properties/
│   │       ├── PropertyDiagnostic.cs
│   │       └── PropertyProcessor.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Registration/
│   │   ├── ContainerRegistration.cs
│   │   └── InternalRegistration.cs
│   ├── Storage/
│   │   ├── HashRegistry.cs
│   │   ├── IRegistry.cs
│   │   ├── IStagedStrategyChain.cs
│   │   ├── LinkedNode.cs
│   │   ├── LinkedRegistry.cs
│   │   ├── PolicyList.cs
│   │   ├── QuickSet.cs
│   │   ├── RegistrationSet.cs
│   │   ├── Registrations.cs
│   │   └── StagedStrategyChain.cs
│   ├── Strategies/
│   │   ├── ArrayResolveStrategy.cs
│   │   ├── BuildKeyMappingStrategy.cs
│   │   ├── BuildPlanStrategy.cs
│   │   ├── BuilderStrategy.cs
│   │   └── LifetimeStrategy.cs
│   ├── Unity.Container.csproj
│   ├── Unity.Container.csproj.DotSettings
│   ├── UnityContainer.ContainerContext.cs
│   ├── UnityContainer.Diagnostic.cs
│   ├── UnityContainer.IUnityContainer.cs
│   ├── UnityContainer.Implementation.cs
│   ├── UnityContainer.Public.cs
│   ├── UnityContainer.Registration.cs
│   ├── UnityContainer.Resolution.cs
│   ├── Utility/
│   │   ├── ContainerConstants.cs
│   │   └── HashHelpers.cs
│   └── package.snk
└── tests/
    ├── Performance/
    │   ├── Abstracts/
    │   │   ├── BasicBase.cs
    │   │   └── RegistrationBase.cs
    │   ├── Configuration/
    │   │   └── BenchmarkConfiguration.cs
    │   ├── Data/
    │   │   ├── MultiType.cs
    │   │   └── TestData.cs
    │   ├── Performance.csproj
    │   ├── Program.cs
    │   └── Tests/
    │       ├── Registration/
    │       │   └── Registration.cs
    │       └── Resolution/
    │           ├── Compiled.cs
    │           ├── PreCompiled.cs
    │           ├── PreResolved.cs
    │           └── Resolved.cs
    ├── Unity.Diagnostic/
    │   ├── BuildUp.cs
    │   ├── Constructor.cs
    │   ├── Cyclic.cs
    │   ├── Field.cs
    │   ├── Hierarchical.cs
    │   ├── Issues.cs
    │   ├── Method.cs
    │   ├── Overrides.cs
    │   ├── Property.cs
    │   ├── Registration.cs
    │   └── Unity.Specification.Tests.Diagnostic.csproj
    ├── Unity.Specification/
    │   ├── BuildUp.cs
    │   ├── Constructor.cs
    │   ├── Container/
    │   │   ├── Hierachy.cs
    │   │   ├── IsRegistered.cs
    │   │   └── Registrations.cs
    │   ├── Factory/
    │   │   ├── Registration.cs
    │   │   └── Resolution.cs
    │   ├── Field.cs
    │   ├── Issues.cs
    │   ├── Lifetime.cs
    │   ├── Method.cs
    │   ├── Parameter.cs
    │   ├── Property.cs
    │   ├── Registration.cs
    │   ├── Resolution/
    │   │   ├── Array.cs
    │   │   ├── Basics.cs
    │   │   ├── Deferred.cs
    │   │   ├── Enumerable.cs
    │   │   ├── Generic.cs
    │   │   ├── Lazy.cs
    │   │   ├── Mapping.cs
    │   │   └── Overrides.cs
    │   └── Unity.Specification.Tests.csproj
    └── Unity.Tests/
        ├── ChildContainer/
        │   ├── ChildContainerInterfaceChangeFixture.cs
        │   ├── ITestContainer.cs
        │   ├── TestContainer.cs
        │   ├── TestContainer1.cs
        │   ├── TestContainer2.cs
        │   └── TestContainer3.cs
        ├── CollectionSupport/
        │   ├── CollectionSupportFixture.cs
        │   ├── ConfigurationTestClass.cs
        │   ├── ConfigurationTestClassGeneric.cs
        │   ├── ITestInterface.cs
        │   ├── TestClass.cs
        │   ├── TestClassDerived.cs
        │   ├── TestClassWithArrayDependency.cs
        │   ├── TestClassWithDependencyArrayConstructor.cs
        │   ├── TestClassWithDependencyArrayMethod.cs
        │   ├── TestClassWithDependencyArrayProperty.cs
        │   ├── TestClassWithDependencyEnumerableConstructor.cs
        │   ├── TestClassWithDependencyTypeConstructor.cs
        │   ├── TestClassWithDependencyTypeMethod.cs
        │   └── TestClassWithEnumerableDependency.cs
        ├── Container/
        │   ├── ContainerBuildUpFixture.cs
        │   ├── ContainerControlledLifetimeThreadingFixture.cs
        │   ├── ContainerDefaultContentFixture.cs
        │   ├── SeparateContainerFixture.cs
        │   ├── UnityExtensionFixture.cs
        │   └── UnityHierarchyFixture.cs
        ├── ContainerRegistration/
        │   ├── AnotherTypeImplementation.cs
        │   ├── GivenContainerIntrospectionCorrectUsageFixture.cs
        │   ├── ITypeAnotherInterface.cs
        │   ├── ITypeInterface.cs
        │   └── TypeImplementation.cs
        ├── Extensions/
        │   ├── DefaultLifetimeExtensionTests.cs
        │   ├── DiagnosticExtensionTests.cs
        │   └── LegacyExtensionTests.cs
        ├── Generics/
        │   ├── ClassWithConstMethodandProperty.cs
        │   ├── Foo.cs
        │   ├── FooRepository.cs
        │   ├── GenMockLogger.cs
        │   ├── GenSpecialLogger.cs
        │   ├── GenericA.cs
        │   ├── GenericB.cs
        │   ├── GenericC.cs
        │   ├── GenericChainingFixture.cs
        │   ├── GenericConstraintsFixture.cs
        │   ├── GenericD.cs
        │   ├── GenericList.cs
        │   ├── GenericParameterFixture.cs
        │   ├── GenericResolvedArrayParameterFixture.cs
        │   ├── GenericsFixture.cs
        │   ├── GenericsReflectionExperimentsFixture.cs
        │   ├── HaveAGenericType.cs
        │   ├── HaveManyGenericTypes.cs
        │   ├── HaveManyGenericTypesClosed.cs
        │   ├── IFoo.cs
        │   ├── IGenLogger.cs
        │   ├── IHaveAGenericType.cs
        │   ├── IHaveManyGenericTypes.cs
        │   ├── IHaveManyGenericTypesClosed.cs
        │   ├── IRepository.cs
        │   ├── MockRespository.cs
        │   ├── Refer.cs
        │   └── Refer1.cs
        ├── Injection/
        │   ├── InjectedMembersFixture.cs
        │   ├── InjectingArraysFixture.cs
        │   ├── OptionalDependencyAPIConfigurationFixture.cs
        │   ├── OptionalDependencyAttributeFixture.cs
        │   ├── OptionalDependencyFixture.cs
        │   └── OptionalGenericParameterFixture.cs
        ├── Issues/
        │   ├── CodeGenBugFixture.cs
        │   ├── CodeplexIssuesFixture.cs
        │   └── GitHub.cs
        ├── Lifetime/
        │   ├── A.cs
        │   ├── AA.cs
        │   ├── ATTest.cs
        │   ├── B.cs
        │   ├── BB.cs
        │   ├── HierarchicalLifetimeFixture.cs
        │   ├── I1.cs
        │   ├── I2.cs
        │   ├── ITTest.cs
        │   ├── LifetimeFixture.cs
        │   ├── PerResolveLifetimeFixture.cs
        │   └── UnityTestClass.cs
        ├── ObjectBuilder/
        │   ├── BuildPlanAndChildContainerFixture.cs
        │   ├── LifetimeContainerTest.cs
        │   ├── StagedStrategyChainTest.cs
        │   └── Utility/
        │       ├── ActivatorCreationStrategy.cs
        │       ├── AssertActualExpectedException.cs
        │       └── AssertHelper.cs
        ├── Override/
        │   ├── IForToUndergoeInject.cs
        │   ├── IForTypeToInject.cs
        │   ├── IInterfaceForTypesToInject.cs
        │   ├── IInterfaceForTypesToInjectForPropertyOverride.cs
        │   ├── ISubjectTypeToInject.cs
        │   ├── ISubjectTypeToInjectForPropertyOverride.cs
        │   ├── MultiThreadedPropertyOverrideFixture.cs
        │   ├── MySimpleType.cs
        │   ├── MySimpleTypeForPropertyOverride.cs
        │   ├── SubjectType1ToInject.cs
        │   ├── SubjectType1ToInjectForPropertyOverride.cs
        │   ├── SubjectType2ToInject.cs
        │   ├── SubjectType2ToInjectForPropertyOverride.cs
        │   ├── SubjectType3ToInject.cs
        │   ├── SubjectType3ToInjectForPropertyOverride.cs
        │   ├── TestTypeInConfig.cs
        │   ├── TypeBasedOverrideFixture.cs
        │   ├── TypeToInject1.cs
        │   ├── TypeToInject1ForTypeOverride.cs
        │   ├── TypeToInject2.cs
        │   ├── TypeToInject2ForTypeOverride.cs
        │   ├── TypeToInject3.cs
        │   ├── TypeToInject3ForTypeOverride.cs
        │   ├── TypeToInjectForPropertyOverride1.cs
        │   ├── TypeToInjectForPropertyOverride2.cs
        │   ├── TypeToInjectForPropertyOverride3.cs
        │   ├── TypeToToUndergoeTypeBasedInject2.cs
        │   ├── TypeToToUndergoeTypeBasedInject3.cs
        │   └── TypeToUndergoeTypeBasedInject1.cs
        ├── Storage/
        │   └── RegistrationSetTests.cs
        ├── TestDoubles/
        │   ├── DependencyAttribute.cs
        │   ├── InjectionConstructorAttribute.cs
        │   ├── InjectionMethodAttribute.cs
        │   ├── MockContainerExtension.cs
        │   ├── MockContainerExtensionWithNonDefaultConstructor.cs
        │   ├── SpyExtension.cs
        │   ├── SpyPolicy.cs
        │   └── SpyStrategy.cs
        ├── TestObjects/
        │   ├── DisposableObject.cs
        │   ├── EmailService.cs
        │   ├── FileLogger.cs
        │   ├── IBase.cs
        │   ├── IService.cs
        │   ├── NullLogger.cs
        │   ├── ObjectWithAmbiguousConstructors.cs
        │   ├── ObjectWithAmbiguousMarkedConstructor.cs
        │   ├── ObjectWithExplicitInterface.cs
        │   ├── ObjectWithInjectionConstructor.cs
        │   ├── ObjectWithLotsOfDependencies.cs
        │   ├── ObjectWithMarkedConstructor.cs
        │   ├── ObjectWithMultipleConstructors.cs
        │   ├── ObjectWithOneDependency.cs
        │   ├── ObjectWithStaticAndInstanceProperties.cs
        │   ├── ObjectWithTwoConstructorDependencies.cs
        │   └── OptionalLogger.cs
        ├── TestSupport/
        │   ├── AssertExtensions.cs
        │   ├── AssertHelper.cs
        │   ├── CollectionAssertExtensions.cs
        │   ├── EnumerableAssertionExtensions.cs
        │   ├── EnumerableExtensions.cs
        │   ├── ExtensibilityTestExtension.cs
        │   ├── Guard.cs
        │   ├── IAdditionalInterface.cs
        │   ├── ILogger.cs
        │   ├── MockContainerExtension.cs
        │   ├── MockDatabase.cs
        │   ├── MockLogger.cs
        │   ├── NegativeTypeConverter.cs
        │   ├── ObjectUsingLogger.cs
        │   ├── ObjectWithOneConstructorDependency.cs
        │   ├── ObjectWithTwoConstructorParameters.cs
        │   ├── ObjectWithTwoProperties.cs
        │   ├── Pair.cs
        │   ├── Sequence.cs
        │   ├── SessionLifetimeManager.cs
        │   ├── SpecialLogger.cs
        │   └── TypeReflectionExtensions.cs
        └── Unity.Tests.csproj
Download .txt
SYMBOL INDEX (1671 symbols across 289 files)

FILE: src/Builder/Context/BuilderContext.cs
  type BuilderContext (line 18) | [SecuritySafeCritical]
    method Resolve (line 41) | public object Resolve(Type type, string name)
    method Get (line 75) | public object Get(Type policyInterface)
    method Get (line 81) | public object Get(Type type, string name, Type policyInterface)
    method Get (line 89) | public object Get(Type type, Type policyInterface)
    method Set (line 95) | public void Set(Type policyInterface, object policy)
    method Set (line 100) | public void Set(Type type, Type policyInterface, object policy)
    method Set (line 105) | public void Set(Type type, string name, Type policyInterface, object p...
    method Clear (line 110) | public void Clear(Type type, string name, Type policyInterface)
    method Resolve (line 150) | public object Resolve(Type type, string name, InternalRegistration reg...
    method Resolve (line 181) | public object Resolve(ParameterInfo parameter, object value)
    method Resolve (line 226) | public object Resolve(PropertyInfo property, object value)
    method Resolve (line 285) | public object Resolve(FieldInfo field, object value)

FILE: src/Builder/Context/BuilderContextExpression.cs
  class BuilderContextExpression (line 8) | public class BuilderContextExpression : IResolveContextExpression<Builde...
    method BuilderContextExpression (line 52) | static BuilderContextExpression()

FILE: src/Builder/Stages/BuilderStage.cs
  type BuilderStage (line 11) | public enum BuilderStage

FILE: src/Builder/Stages/SelectionStage.cs
  type SelectionStage (line 3) | public enum SelectionStage

FILE: src/Builder/Stages/UnityBuildStage.cs
  type UnityBuildStage (line 9) | public enum UnityBuildStage

FILE: src/Events/ChildContainerCreatedEventArgs.cs
  class ChildContainerCreatedEventArgs (line 11) | public class ChildContainerCreatedEventArgs : EventArgs
    method ChildContainerCreatedEventArgs (line 19) | public ChildContainerCreatedEventArgs(ExtensionContext childContext)

FILE: src/Events/NamedEventArgs.cs
  class NamedEventArgs (line 10) | public abstract class NamedEventArgs : EventArgs
    method NamedEventArgs (line 17) | protected NamedEventArgs()
    method NamedEventArgs (line 25) | protected NamedEventArgs(string name)

FILE: src/Events/RegisterEventArgs.cs
  class RegisterEventArgs (line 10) | public class RegisterEventArgs : NamedEventArgs
    method RegisterEventArgs (line 19) | public RegisterEventArgs(Type typeFrom, Type typeTo, string name, Life...

FILE: src/Events/RegisterInstanceEventArgs.cs
  class RegisterInstanceEventArgs (line 10) | public class RegisterInstanceEventArgs : NamedEventArgs
    method RegisterInstanceEventArgs (line 15) | public RegisterInstanceEventArgs()
    method RegisterInstanceEventArgs (line 27) | public RegisterInstanceEventArgs(Type registeredType, object instance,...

FILE: src/Exceptions/DependencyMissingException.cs
  class DependencyMissingException (line 9) | public class DependencyMissingException : Exception
    method DependencyMissingException (line 14) | public DependencyMissingException()
    method DependencyMissingException (line 22) | public DependencyMissingException(string message)
    method DependencyMissingException (line 33) | public DependencyMissingException(string message, Exception innerExcep...
    method DependencyMissingException (line 42) | public DependencyMissingException(object buildKey)

FILE: src/Exceptions/IllegalInjectionMethodException.Desktop.cs
  class IllegalInjectionMethodException (line 9) | [Serializable]

FILE: src/Exceptions/IllegalInjectionMethodException.cs
  class IllegalInjectionMethodException (line 11) | public partial class IllegalInjectionMethodException : Exception
    method IllegalInjectionMethodException (line 17) | public IllegalInjectionMethodException()
    method IllegalInjectionMethodException (line 25) | public IllegalInjectionMethodException(string message)
    method IllegalInjectionMethodException (line 36) | public IllegalInjectionMethodException(string message, Exception inner...

FILE: src/Exceptions/InvalidRegistrationException.cs
  class InvalidRegistrationException (line 5) | internal class InvalidRegistrationException : Exception
    method InvalidRegistrationException (line 7) | public InvalidRegistrationException()
    method InvalidRegistrationException (line 13) | public InvalidRegistrationException(string message, Exception exception)

FILE: src/Exceptions/MakeGenericTypeFailedException.cs
  class MakeGenericTypeFailedException (line 5) | internal class MakeGenericTypeFailedException : Exception
    method MakeGenericTypeFailedException (line 7) | public MakeGenericTypeFailedException(ArgumentException innerException)

FILE: src/Extension/ExtensionContext.cs
  class ExtensionContext (line 17) | public abstract class ExtensionContext

FILE: src/Extension/IUnityContainerExtensionConfigurator.cs
  type IUnityContainerExtensionConfigurator (line 9) | public interface IUnityContainerExtensionConfigurator

FILE: src/Extension/UnityContainerExtension.cs
  class UnityContainerExtension (line 10) | public abstract class UnityContainerExtension : IUnityContainerExtension...
    method InitializeExtension (line 20) | public void InitializeExtension(ExtensionContext context)
    method Initialize (line 51) | protected abstract void Initialize();
    method Remove (line 65) | public virtual void Remove()

FILE: src/Extensions/DefaultLifetime.cs
  class DefaultLifetime (line 7) | public class DefaultLifetime : UnityContainerExtension
    method Initialize (line 9) | protected override void Initialize()

FILE: src/Extensions/Diagnostic.cs
  class Diagnostic (line 45) | public class Diagnostic : UnityContainerExtension
    method Initialize (line 47) | protected override void Initialize()
  class DiagnosticExtensions (line 60) | public static class DiagnosticExtensions
    method EnableDebugDiagnostic (line 82) | [Conditional("DEBUG")]
    method EnableDiagnostic (line 108) | public static UnityContainer EnableDiagnostic(this UnityContainer cont...

FILE: src/Extensions/ExtensionExtensions.cs
  class ExtensionExtensions (line 10) | public static class ExtensionExtensions
    method AddExtension (line 19) | public static IUnityContainer AddExtension(this IUnityContainer contai...
    method Configure (line 33) | public static object Configure(this IUnityContainer container, Type co...
    method AddNewExtension (line 46) | public static IUnityContainer AddNewExtension<TExtension>(this IUnityC...
    method Configure (line 63) | public static TConfigurator Configure<TConfigurator>(this IUnityContai...

FILE: src/Extensions/Legacy.cs
  class Legacy (line 8) | public class Legacy : UnityContainerExtension
    method Initialize (line 10) | protected override void Initialize()

FILE: src/Extensions/Strategies.cs
  class ForceActivation (line 13) | public class ForceActivation : UnityContainerExtension
    method Initialize (line 15) | protected override void Initialize()
  class ForceCompillation (line 27) | public class ForceCompillation : UnityContainerExtension
    method Initialize (line 29) | protected override void Initialize()

FILE: src/Factories/DeferredFuncResolverFactory.cs
  class DeferredFuncResolverFactory (line 9) | internal class DeferredFuncResolverFactory
    method DeferredResolveDelegateFactory (line 14) | public static ResolveDelegate<BuilderContext> DeferredResolveDelegateF...
    method DeferredResolve (line 22) | private static Func<T> DeferredResolve<T>(ref BuilderContext context)

FILE: src/Factories/GenericLazyResolverFactory.cs
  class GenericLazyResolverFactory (line 14) | internal class GenericLazyResolverFactory
    method GetResolver (line 27) | public static ResolveDelegate<BuilderContext> GetResolver(ref BuilderC...
    method BuildResolveLazy (line 40) | private static object BuildResolveLazy<T>(ref BuilderContext context)

FILE: src/Injection/Validating.cs
  class Validating (line 7) | public static class Validating

FILE: src/Legacy/DynamicMethod/DynamicBuildPlanGenerationContext.cs
  class DynamicBuildPlanGenerationContext (line 15) | public class DynamicBuildPlanGenerationContext
    method DynamicBuildPlanGenerationContext (line 23) | public DynamicBuildPlanGenerationContext(Type typeToBuild)
    method AddToBuildPlan (line 38) | public void AddToBuildPlan(Expression expression)
    method GetBuildMethod (line 43) | internal ResolveDelegate<BuilderContext> GetBuildMethod()

FILE: src/Legacy/IBuildPlanCreatorPolicy.cs
  type IBuildPlanCreatorPolicy (line 6) | [Obsolete("This interface has been replaced with Unity.Policy.ResolveDel...
    method CreatePlan (line 16) | IBuildPlanPolicy CreatePlan(ref BuilderContext context, Type type, str...

FILE: src/Legacy/IBuildPlanPolicy.cs
  type IBuildPlanPolicy (line 6) | [Obsolete("IBuildPlanPolicy has been deprecated, please use ResolveDeleg...
    method BuildUp (line 9) | void BuildUp(ref BuilderContext context);

FILE: src/Legacy/IConstructorSelectorPolicy.cs
  type IConstructorSelectorPolicy (line 6) | [Obsolete("IConstructorSelectorPolicy has been deprecated, please use IS...

FILE: src/Legacy/IMethodSelectorPolicy.cs
  type IMethodSelectorPolicy (line 8) | [Obsolete("IMethodSelectorPolicy has been deprecated, please use ISelect...
    method SelectMethods (line 11) | IEnumerable<object> SelectMethods(ref BuilderContext context);

FILE: src/Legacy/IPropertySelectorPolicy.cs
  type IPropertySelectorPolicy (line 8) | [Obsolete("IPropertySelectorPolicy has been deprecated, please use IProp...
    method SelectProperties (line 11) | IEnumerable<object> SelectProperties(ref BuilderContext context);

FILE: src/Legacy/InjectionParameterValue.cs
  class Injection_ParameterValue (line 8) | public abstract class Injection_ParameterValue

FILE: src/Legacy/NamedTypeBuildKey.cs
  class NamedTypeBuildKey (line 11) | public class NamedTypeBuildKey
    method NamedTypeBuildKey (line 21) | public NamedTypeBuildKey(Type type, string name)
    method NamedTypeBuildKey (line 33) | public NamedTypeBuildKey(Type type)
    method Make (line 44) | public static NamedTypeBuildKey Make<T>()
    method Make (line 56) | public static NamedTypeBuildKey Make<T>(string name)
    method Equals (line 81) | public override bool Equals(object obj)
    method GetHashCode (line 90) | public override int GetHashCode()
    method ToString (line 127) | public override string ToString()
    method NamedTypeBuildKey (line 144) | public NamedTypeBuildKey()
    method NamedTypeBuildKey (line 154) | public NamedTypeBuildKey(string name)
  class NamedTypeBuildKey (line 138) | public class NamedTypeBuildKey<T> : NamedTypeBuildKey
    method NamedTypeBuildKey (line 21) | public NamedTypeBuildKey(Type type, string name)
    method NamedTypeBuildKey (line 33) | public NamedTypeBuildKey(Type type)
    method Make (line 44) | public static NamedTypeBuildKey Make<T>()
    method Make (line 56) | public static NamedTypeBuildKey Make<T>(string name)
    method Equals (line 81) | public override bool Equals(object obj)
    method GetHashCode (line 90) | public override int GetHashCode()
    method ToString (line 127) | public override string ToString()
    method NamedTypeBuildKey (line 144) | public NamedTypeBuildKey()
    method NamedTypeBuildKey (line 154) | public NamedTypeBuildKey(string name)

FILE: src/Legacy/TypeBasedOverride.cs
  class TypeBasedOverride (line 13) | [Obsolete("This type has been deprecated as degrading performance. Use D...
    method TypeBasedOverride (line 32) | public TypeBasedOverride(Type targetType, ResolverOverride innerOverride)
    method GetResolver (line 44) | public override ResolveDelegate<TContext> GetResolver<TContext>(Type t...
    method GetHashCode (line 54) | public override int GetHashCode()
    method Equals (line 59) | public override bool Equals(object obj)
    method Equals (line 64) | public bool Equals(PropertyInfo other)
    method Equals (line 70) | public bool Equals(ParameterInfo other)
    method TypeBasedOverride (line 91) | public TypeBasedOverride(ResolverOverride innerOverride)
  class TypeBasedOverride (line 84) | [Obsolete("This type has been deprecated as degrading performance. Use D...
    method TypeBasedOverride (line 32) | public TypeBasedOverride(Type targetType, ResolverOverride innerOverride)
    method GetResolver (line 44) | public override ResolveDelegate<TContext> GetResolver<TContext>(Type t...
    method GetHashCode (line 54) | public override int GetHashCode()
    method Equals (line 59) | public override bool Equals(object obj)
    method Equals (line 64) | public bool Equals(PropertyInfo other)
    method Equals (line 70) | public bool Equals(ParameterInfo other)
    method TypeBasedOverride (line 91) | public TypeBasedOverride(ResolverOverride innerOverride)

FILE: src/Legacy/TypedInjectionValue.cs
  class Typed_InjectionValue (line 10) | public abstract class Typed_InjectionValue : Injection_ParameterValue

FILE: src/Lifetime/ContainerLifetimeManager.cs
  class ContainerLifetimeManager (line 11) | internal class ContainerLifetimeManager : LifetimeManager, IInstanceLife...
    method GetValue (line 13) | public override object GetValue(ILifetimeContainer container = null)
    method OnCreateLifetimeManager (line 18) | protected override LifetimeManager OnCreateLifetimeManager()

FILE: src/Lifetime/InternalPerResolveLifetimeManager.cs
  class InternalPerResolveLifetimeManager (line 10) | internal class InternalPerResolveLifetimeManager : PerResolveLifetimeMan...
    method InternalPerResolveLifetimeManager (line 20) | public InternalPerResolveLifetimeManager(object value)

FILE: src/Lifetime/LifetimeContainer.cs
  class LifetimeContainer (line 16) | public class LifetimeContainer : ILifetimeContainer
    method LifetimeContainer (line 20) | public LifetimeContainer(IUnityContainer owner = null)
    method Add (line 53) | public void Add(object item)
    method Contains (line 71) | public bool Contains(object item)
    method Dispose (line 82) | public void Dispose()
    method Dispose (line 94) | protected virtual void Dispose(bool disposing)
    method GetEnumerator (line 140) | public IEnumerator<object> GetEnumerator()
    method GetEnumerator (line 151) | IEnumerator IEnumerable.GetEnumerator()
    method Remove (line 161) | public void Remove(object item)

FILE: src/Policy/IResolveDelegateFactory.cs
  type IResolveDelegateFactory (line 8) | public interface IResolveDelegateFactory
    method GetResolver (line 10) | ResolveDelegate<BuilderContext> GetResolver(ref BuilderContext context);

FILE: src/Policy/ISelect.cs
  type ISelect (line 7) | public interface ISelect<TMemberInfo> where TMemberInfo : MemberInfo
    method Select (line 9) | IEnumerable<object> Select(Type type, IPolicySet registration);

FILE: src/Processors/Abstracts/MemberExpression.cs
  class MemberProcessor (line 9) | public abstract partial class MemberProcessor<TMemberInfo, TData> where ...
    method ExpressionsFromSelection (line 13) | protected virtual IEnumerable<Expression> ExpressionsFromSelection(Typ...
    method GetResolverExpression (line 56) | protected abstract Expression GetResolverExpression(TMemberInfo info, ...

FILE: src/Processors/Abstracts/MemberProcessor.cs
  class MemberProcessor (line 16) | public abstract class MemberProcessor
    method GetExpressions (line 58) | public abstract IEnumerable<Expression> GetExpressions(Type type, IPol...
    method GetResolver (line 75) | public abstract ResolveDelegate<BuilderContext> GetResolver(Type type,...
    method MemberProcessor (line 94) | protected MemberProcessor(IPolicySet policySet)
    method MemberProcessor (line 106) | protected MemberProcessor(IPolicySet policySet, Type attribute)
    method Add (line 123) | public void Add(Type type, Func<Attribute, string> getName, Func<Attri...
    method GetExpressions (line 145) | public override IEnumerable<Expression> GetExpressions(Type type, IPol...
    method GetResolver (line 154) | public override ResolveDelegate<BuilderContext> GetResolver(Type type,...
    method Select (line 173) | public virtual IEnumerable<object> Select(Type type, IPolicySet regist...
    method MemberType (line 209) | protected abstract Type MemberType(TMemberInfo info);
    method DeclaredMembers (line 211) | protected abstract IEnumerable<TMemberInfo> DeclaredMembers(Type type);
    method PreProcessResolver (line 213) | protected object PreProcessResolver(TMemberInfo info, object resolver)
    method GetCustomAttribute (line 231) | protected Attribute GetCustomAttribute(TMemberInfo info, Type type)
    method GetPolicy (line 251) | public TPolicyInterface GetPolicy<TPolicyInterface>(IPolicySet registr...
    method DependencyResolverFactory (line 262) | protected virtual ResolveDelegate<BuilderContext> DependencyResolverFa...
    method OptionalDependencyResolverFactory (line 268) | protected virtual ResolveDelegate<BuilderContext> OptionalDependencyRe...
    type AttributeFactoryNode (line 290) | public struct AttributeFactoryNode
      method AttributeFactoryNode (line 296) | public AttributeFactoryNode(Type type, Func<Attribute, string> getNa...
  class MemberProcessor (line 80) | public abstract partial class MemberProcessor<TMemberInfo, TData> : Memb...
    method GetExpressions (line 58) | public abstract IEnumerable<Expression> GetExpressions(Type type, IPol...
    method GetResolver (line 75) | public abstract ResolveDelegate<BuilderContext> GetResolver(Type type,...
    method MemberProcessor (line 94) | protected MemberProcessor(IPolicySet policySet)
    method MemberProcessor (line 106) | protected MemberProcessor(IPolicySet policySet, Type attribute)
    method Add (line 123) | public void Add(Type type, Func<Attribute, string> getName, Func<Attri...
    method GetExpressions (line 145) | public override IEnumerable<Expression> GetExpressions(Type type, IPol...
    method GetResolver (line 154) | public override ResolveDelegate<BuilderContext> GetResolver(Type type,...
    method Select (line 173) | public virtual IEnumerable<object> Select(Type type, IPolicySet regist...
    method MemberType (line 209) | protected abstract Type MemberType(TMemberInfo info);
    method DeclaredMembers (line 211) | protected abstract IEnumerable<TMemberInfo> DeclaredMembers(Type type);
    method PreProcessResolver (line 213) | protected object PreProcessResolver(TMemberInfo info, object resolver)
    method GetCustomAttribute (line 231) | protected Attribute GetCustomAttribute(TMemberInfo info, Type type)
    method GetPolicy (line 251) | public TPolicyInterface GetPolicy<TPolicyInterface>(IPolicySet registr...
    method DependencyResolverFactory (line 262) | protected virtual ResolveDelegate<BuilderContext> DependencyResolverFa...
    method OptionalDependencyResolverFactory (line 268) | protected virtual ResolveDelegate<BuilderContext> OptionalDependencyRe...
    type AttributeFactoryNode (line 290) | public struct AttributeFactoryNode
      method AttributeFactoryNode (line 296) | public AttributeFactoryNode(Type type, Func<Attribute, string> getNa...

FILE: src/Processors/Abstracts/MemberResolution.cs
  class MemberProcessor (line 10) | public abstract partial class MemberProcessor<TMemberInfo, TData> where ...
    method ResolversFromSelection (line 14) | protected virtual IEnumerable<ResolveDelegate<BuilderContext>> Resolve...
    method GetResolverDelegate (line 56) | protected abstract ResolveDelegate<BuilderContext> GetResolverDelegate...

FILE: src/Processors/Constructor/ConstructorDiagnostic.cs
  class ConstructorDiagnostic (line 17) | public class ConstructorDiagnostic : ConstructorProcessor
    method ConstructorDiagnostic (line 71) | public ConstructorDiagnostic(IPolicySet policySet, UnityContainer cont...
    method Select (line 81) | public override IEnumerable<object> Select(Type type, IPolicySet regis...
    method SmartSelector (line 150) | protected override object SmartSelector(Type type, ConstructorInfo[] c...
    method GetExpressions (line 211) | public override IEnumerable<Expression> GetExpressions(Type type, IPol...
    method GetResolverExpression (line 233) | protected override Expression GetResolverExpression(ConstructorInfo in...
    method GetResolver (line 281) | public override ResolveDelegate<BuilderContext> GetResolver(Type type,...
    method GetResolverDelegate (line 341) | protected override ResolveDelegate<BuilderContext> GetResolverDelegate...
    method GetPerResolveDelegate (line 368) | protected override ResolveDelegate<BuilderContext> GetPerResolveDelega...

FILE: src/Processors/Constructor/ConstructorExpression.cs
  class ConstructorProcessor (line 14) | public partial class ConstructorProcessor
    method GetExpressions (line 53) | public override IEnumerable<Expression> GetExpressions(Type type, IPol...
    method GetResolverExpression (line 95) | protected override Expression GetResolverExpression(ConstructorInfo in...

FILE: src/Processors/Constructor/ConstructorProcessor.cs
  class ConstructorProcessor (line 13) | public partial class ConstructorProcessor : ParametersProcessor<Construc...
    method ConstructorProcessor (line 17) | public ConstructorProcessor(IPolicySet policySet, UnityContainer conta...
    method Select (line 35) | public override IEnumerable<object> Select(Type type, IPolicySet regis...
    method DeclaredMembers (line 74) | protected override IEnumerable<ConstructorInfo> DeclaredMembers(Type t...
    method LegacySelector (line 92) | public object LegacySelector(Type type, ConstructorInfo[] members)
    method SmartSelector (line 150) | protected virtual object SmartSelector(Type type, ConstructorInfo[] co...

FILE: src/Processors/Constructor/ConstructorResolution.cs
  class ConstructorProcessor (line 13) | public partial class ConstructorProcessor
    method GetResolver (line 17) | public override ResolveDelegate<BuilderContext> GetResolver(Type type,...
    method GetResolverDelegate (line 67) | protected override ResolveDelegate<BuilderContext> GetResolverDelegate...
    method GetPerResolveDelegate (line 91) | protected virtual ResolveDelegate<BuilderContext> GetPerResolveDelegat...

FILE: src/Processors/Fields/FieldDiagnostic.cs
  method FieldDiagnostic (line 17) | public FieldDiagnostic(IPolicySet policySet) : base(policySet)

FILE: src/Processors/Fields/FieldProcessor.cs
  class FieldProcessor (line 12) | public class FieldProcessor : MemberProcessor<FieldInfo, object>
    method FieldProcessor (line 16) | public FieldProcessor(IPolicySet policySet)
    method DeclaredMembers (line 26) | protected override IEnumerable<FieldInfo> DeclaredMembers(Type type)
    method MemberType (line 33) | protected override Type MemberType(FieldInfo info) => info.FieldType;
    method GetResolverExpression (line 40) | protected override Expression GetResolverExpression(FieldInfo info, ob...
    method GetResolverDelegate (line 57) | protected override ResolveDelegate<BuilderContext> GetResolverDelegate...

FILE: src/Processors/Methods/MethodDiagnostic.cs
  method MethodDiagnostic (line 18) | public MethodDiagnostic(IPolicySet policySet, UnityContainer container)

FILE: src/Processors/Methods/MethodProcessor.cs
  class MethodProcessor (line 13) | public class MethodProcessor : ParametersProcessor<MethodInfo>
    method MethodProcessor (line 17) | public MethodProcessor(IPolicySet policySet, UnityContainer container)
    method DeclaredMembers (line 27) | protected override IEnumerable<MethodInfo> DeclaredMembers(Type type)
    method GetResolverExpression (line 40) | protected override Expression GetResolverExpression(MethodInfo info, o...
    method GetResolverDelegate (line 59) | protected override ResolveDelegate<BuilderContext> GetResolverDelegate...

FILE: src/Processors/Parameters/ParametersProcessor.cs
  method ParametersProcessor (line 27) | protected ParametersProcessor(IPolicySet policySet, Type attribute, Unit...
  method MemberType (line 38) | protected override Type MemberType(TMemberInfo info) => info.DeclaringType;

FILE: src/Processors/Properties/PropertyDiagnostic.cs
  method PropertyDiagnostic (line 17) | public PropertyDiagnostic(IPolicySet policySet)

FILE: src/Processors/Properties/PropertyProcessor.cs
  class PropertyProcessor (line 11) | public class PropertyProcessor : MemberProcessor<PropertyInfo, object>
    method PropertyProcessor (line 15) | public PropertyProcessor(IPolicySet policySet)
    method MemberType (line 25) | protected override Type MemberType(PropertyInfo info) => info.Property...
    method DeclaredMembers (line 27) | protected override IEnumerable<PropertyInfo> DeclaredMembers(Type type)
    method GetResolverExpression (line 47) | protected override Expression GetResolverExpression(PropertyInfo info,...
    method GetResolverDelegate (line 64) | protected override ResolveDelegate<BuilderContext> GetResolverDelegate...

FILE: src/Registration/ContainerRegistration.cs
  class ContainerRegistration (line 9) | [DebuggerDisplay("ContainerRegistration: MappedTo={Type?.Name ?? string....
    method ContainerRegistration (line 14) | public ContainerRegistration(LinkedNode<Type, object> validators, Type...

FILE: src/Registration/InternalRegistration.cs
  class InternalRegistration (line 10) | [DebuggerDisplay("InternalRegistration")]
    method InternalRegistration (line 16) | public InternalRegistration()
    method InternalRegistration (line 20) | public InternalRegistration(Type policyInterface, object policy)
    method Get (line 44) | public virtual object Get(Type policyInterface)
    method Set (line 55) | public virtual void Set(Type policyInterface, object policy)
    method Clear (line 84) | public virtual void Clear(Type policyInterface)

FILE: src/Storage/HashRegistry.cs
  class HashRegistry (line 10) | [SecuritySafeCritical]
    method HashRegistry (line 32) | public HashRegistry(int capacity)
    method HashRegistry (line 54) | public HashRegistry(int capacity, LinkedNode<string, IPolicySet> head)
    method HashRegistry (line 63) | public HashRegistry(HashRegistry dictionary)
    method GetOrAdd (line 152) | public IPolicySet GetOrAdd(string key, Func<IPolicySet> factory)
    method SetOrReplace (line 176) | public IPolicySet SetOrReplace(string key, IPolicySet value)
    type Entry (line 205) | [DebuggerDisplay("Key='{Key}'   Value='{Value}'   Hash='{HashCode}'")]

FILE: src/Storage/IRegistry.cs
  type IRegistry (line 7) | public interface IRegistry<TKey, TValue>
    method GetOrAdd (line 17) | TValue GetOrAdd(TKey key, Func<TValue> factory);
    method SetOrReplace (line 19) | TValue SetOrReplace(TKey key, TValue value);

FILE: src/Storage/IStagedStrategyChain.cs
  type IStagedStrategyChain (line 10) | public interface IStagedStrategyChain<in TStrategyType, in TStageEnum>
    method Add (line 18) | void Add(TStrategyType strategy, TStageEnum stage);
  class StagedStrategyChainExtensions (line 27) | public static class StagedStrategyChainExtensions
    method AddNew (line 36) | public static void AddNew<TStrategy, TStageEnum>(this IStagedStrategyC...

FILE: src/Storage/LinkedNode.cs
  class LinkedNode (line 5) | [DebuggerDisplay("Node:  Key={Key},  Value={Value}")]

FILE: src/Storage/LinkedRegistry.cs
  class LinkedRegistry (line 9) | [DebuggerDisplay("LinkedRegistry ({_count}) ")]
    method LinkedRegistry (line 23) | public LinkedRegistry(string key, IPolicySet value)
    method LinkedRegistry (line 30) | public LinkedRegistry(HashRegistry registry)
    method Append (line 38) | public void Append(string name, IPolicySet value)
    method GetOrAdd (line 134) | public IPolicySet GetOrAdd(string name, Func<IPolicySet> factory)
    method SetOrReplace (line 163) | public IPolicySet SetOrReplace(string name, IPolicySet value)

FILE: src/Storage/PolicyList.cs
  class PolicyList (line 10) | public class PolicyList : IPolicyList
    method PolicyList (line 26) | public PolicyList()
    method PolicyList (line 33) | public PolicyList(IPolicyList innerPolicyList)
    method Clear (line 52) | public void Clear(Type type, string name, Type policyInterface)
    method ClearDefault (line 61) | public void ClearDefault(Type policyInterface)
    method Get (line 67) | public object Get(Type type, string name, Type policyInterface)
    method Get (line 79) | public object Get(Type type, Type policyInterface)
    method Set (line 91) | public void Set(Type type, Type policyInterface, object policy)
    method Set (line 99) | public void Set(Type type, string name, Type policyInterface, object p...
    type PolicyKey (line 112) | private struct PolicyKey
      method PolicyKey (line 123) | public PolicyKey(Type type, string name, Type policyType)
      method Equals (line 133) | public override bool Equals(object obj)
      method GetHashCode (line 143) | public override int GetHashCode()
    class PolicyKeyEqualityComparer (line 161) | private class PolicyKeyEqualityComparer : IEqualityComparer<PolicyKey>
      method Equals (line 165) | public bool Equals(PolicyKey x, PolicyKey y)
      method GetHashCode (line 170) | public int GetHashCode(PolicyKey obj)

FILE: src/Storage/QuickSet.cs
  class QuickSet (line 6) | [SecuritySafeCritical]
    method QuickSet (line 21) | public QuickSet()
    method Add (line 48) | public bool Add(int hashCode, TValue value)
    type Entry (line 89) | private struct Entry
    method Expand (line 101) | private void Expand()

FILE: src/Storage/RegistrationSet.cs
  class RegistrationSet (line 12) | [DebuggerDisplay("IEnumerable<IContainerRegistration> ({Count}) ")]
    method RegistrationSet (line 31) | public RegistrationSet()
    method Add (line 49) | public void Add(Type type, string name, InternalRegistration registrat...
    method IncreaseCapacity (line 88) | private void IncreaseCapacity()
    method GetEnumerator (line 107) | public IEnumerator<IContainerRegistration> GetEnumerator()
    method GetEnumerator (line 115) | IEnumerator IEnumerable.GetEnumerator()
    type Entry (line 125) | [DebuggerDisplay("RegisteredType={RegisteredType?.Name},    Name={Name...
    class EntryDebugProxy (line 149) | private class EntryDebugProxy
      method EntryDebugProxy (line 153) | public EntryDebugProxy(Entry entry)
    class RegistrationSetDebugProxy (line 168) | private class RegistrationSetDebugProxy
      method RegistrationSetDebugProxy (line 170) | public RegistrationSetDebugProxy(RegistrationSet set)

FILE: src/Storage/Registrations.cs
  class Registrations (line 10) | [SecuritySafeCritical]
    method Registrations (line 32) | public Registrations(int capacity)
    method Registrations (line 54) | public Registrations(int capacity, LinkedNode<Type, IRegistry<string, ...
    method Registrations (line 63) | public Registrations(Registrations dictionary)
    method GetOrAdd (line 146) | public IRegistry<string, IPolicySet> GetOrAdd(Type key, Func<IRegistry...
    method SetOrReplace (line 170) | public IRegistry<string, IPolicySet> SetOrReplace(Type key, IRegistry<...
    type Entry (line 199) | [DebuggerDisplay("Type='{Key}'   Registrations='{Value}'   Hash='{Hash...

FILE: src/Storage/StagedStrategyChain.cs
  class StagedStrategyChain (line 14) | public class StagedStrategyChain<TStrategyType, TStageEnum> : IStagedStr...
    method StagedStrategyChain (line 34) | public StagedStrategyChain()
    method StagedStrategyChain (line 43) | public StagedStrategyChain(StagedStrategyChain<TStrategyType,TStageEnu...
    method OnParentInvalidated (line 62) | private void OnParentInvalidated(object sender, EventArgs e)
    method Enumerate (line 70) | private IEnumerable<TStrategyType> Enumerate(int i)
    method Add (line 91) | public void Add(TStrategyType strategy, TStageEnum stage)
    method ToArray (line 106) | public TStrategyType[] ToArray()
    method GetEnumerator (line 125) | public IEnumerator<TStrategyType> GetEnumerator()
    method GetEnumerator (line 148) | IEnumerator IEnumerable.GetEnumerator()

FILE: src/Strategies/ArrayResolveStrategy.cs
  class ArrayResolveStrategy (line 15) | public class ArrayResolveStrategy : BuilderStrategy
    method ArrayResolveStrategy (line 27) | public ArrayResolveStrategy(MethodInfo method, MethodInfo generic)
    method RequiredToBuildType (line 38) | public override bool RequiredToBuildType(IUnityContainer container, Ty...
    method PreBuildUp (line 57) | public override void PreBuildUp(ref BuilderContext context)

FILE: src/Strategies/BuildKeyMappingStrategy.cs
  class BuildKeyMappingStrategy (line 13) | public class BuildKeyMappingStrategy : BuilderStrategy
    method RequiredToBuildType (line 17) | public override bool RequiredToBuildType(IUnityContainer container, Ty...
    method PreBuildUp (line 73) | public override void PreBuildUp(ref BuilderContext context)

FILE: src/Strategies/BuildPlanStrategy.cs
  method RequiredToBuildType (line 24) | public override bool RequiredToBuildType(IUnityContainer container, Type...
  method PreBuildUp (line 42) | public override void PreBuildUp(ref BuilderContext context)

FILE: src/Strategies/BuilderStrategy.cs
  class BuilderStrategy (line 13) | public abstract class BuilderStrategy
    method PreBuildUp (line 24) | public virtual void PreBuildUp(ref BuilderContext context)
    method PostBuildUp (line 34) | public virtual void PostBuildUp(ref BuilderContext context)
    method RequiredToBuildType (line 51) | public virtual bool RequiredToBuildType(IUnityContainer container, Typ...
    method RequiredToResolveInstance (line 62) | public virtual bool RequiredToResolveInstance(IUnityContainer containe...
    method GetPolicy (line 72) | public static TPolicyInterface GetPolicy<TPolicyInterface>(ref Builder...

FILE: src/Strategies/LifetimeStrategy.cs
  class LifetimeStrategy (line 16) | public class LifetimeStrategy : BuilderStrategy
    method PreBuildUp (line 27) | public override void PreBuildUp(ref BuilderContext context)
    method PostBuildUp (line 78) | public override void PostBuildUp(ref BuilderContext context)
    method RequiredToBuildType (line 97) | public override bool RequiredToBuildType(IUnityContainer container, Ty...
    method RequiredToResolveInstance (line 116) | public override bool RequiredToResolveInstance(IUnityContainer contain...

FILE: src/UnityContainer.ContainerContext.cs
  class UnityContainer (line 13) | public partial class UnityContainer
    class ContainerContext (line 23) | private class ContainerContext : ExtensionContext,
      method ContainerContext (line 36) | public ContainerContext(UnityContainer container)
      method ClearAll (line 92) | public virtual void ClearAll()
      method Get (line 96) | public virtual object Get(Type type, Type policyInterface)
      method Get (line 99) | public virtual object Get(Type type, string name, Type policyInterface)
      method Set (line 102) | public virtual void Set(Type type, Type policyInterface, object policy)
      method Set (line 105) | public virtual void Set(Type type, string name, Type policyInterface...
      method Clear (line 108) | public virtual void Clear(Type type, string name, Type policyInterface)

FILE: src/UnityContainer.Diagnostic.cs
  class UnityContainer (line 13) | [DebuggerDisplay("{" + nameof(DebugName) + "()}")]
    method CreateDiagnosticMessage (line 31) | private static string CreateDiagnosticMessage(Exception ex)
    method DataToString (line 46) | private static string DataToString(object value)
    method DebugName (line 84) | private string DebugName()
    class UnityContainerDebugProxy (line 96) | internal class UnityContainerDebugProxy
      method UnityContainerDebugProxy (line 100) | public UnityContainerDebugProxy(IUnityContainer container)

FILE: src/UnityContainer.IUnityContainer.cs
  class UnityContainer (line 15) | public partial class UnityContainer : IUnityContainer
    method RegisterType (line 28) | IUnityContainer IUnityContainer.RegisterType(Type typeFrom, Type typeT...
    method RegisterInstance (line 111) | IUnityContainer IUnityContainer.RegisterInstance(Type type, string nam...
    method RegisterFactory (line 173) | public IUnityContainer RegisterFactory(Type type, string name, Func<IU...
    method IsRegistered (line 226) | bool IUnityContainer.IsRegistered(Type type, string name) => Reference...
    method Resolve (line 234) | object IUnityContainer.Resolve(Type type, string name, params Resolver...
    method BuildUp (line 266) | object IUnityContainer.BuildUp(Type type, object existing, string name...
    method CreateChildContainer (line 303) | IUnityContainer IUnityContainer.CreateChildContainer()

FILE: src/UnityContainer.Implementation.cs
  method UnityContainer (line 95) | private UnityContainer(UnityContainer parent)
  class RegistrationContext (line 436) | private class RegistrationContext : IPolicyList
    method RegistrationContext (line 443) | internal RegistrationContext(UnityContainer container, Type type, stri...
    method Get (line 454) | public object Get(Type type, Type policyInterface)
    method Get (line 462) | public object Get(Type type, string name, Type policyInterface)
    method Set (line 470) | public void Set(Type type, Type policyInterface, object policy)
    method Set (line 478) | public void Set(Type type, string name, Type policyInterface, object p...
    method Clear (line 486) | public void Clear(Type type, string name, Type policyInterface)
  type ContainerRegistrationStruct (line 497) | [DebuggerDisplay("RegisteredType={RegisteredType?.Name},    Name={Name},...

FILE: src/UnityContainer.Public.cs
  class UnityContainer (line 17) | public partial class UnityContainer
    method UnityContainer (line 24) | public UnityContainer()
    method AddExtension (line 171) | public IUnityContainer AddExtension(IUnityContainerExtensionConfigurat...
    method Configure (line 194) | public object Configure(Type configurationInterface)
    method Dispose (line 218) | public void Dispose()

FILE: src/UnityContainer.Registration.cs
  class UnityContainer (line 11) | public partial class UnityContainer
    method IsExplicitlyRegisteredLocally (line 35) | private bool IsExplicitlyRegisteredLocally(Type type, string name)
    method IsTypeTypeExplicitlyRegisteredLocally (line 56) | private bool IsTypeTypeExplicitlyRegisteredLocally(Type type)
    method RegistrationExists (line 78) | internal bool RegistrationExists(Type type, string name)
    method GetRegistrations (line 151) | private static RegistrationSet GetRegistrations(UnityContainer container)
    method GetRegistrations (line 208) | private static RegistrationSet GetRegistrations(UnityContainer contain...
    method GetNamedRegistrations (line 249) | private static RegistrationSet GetNamedRegistrations(UnityContainer co...
    method Get (line 295) | private IRegistry<string, IPolicySet> Get(Type type)
    method AppendNew (line 321) | internal IPolicySet AppendNew(Type type, string name, InternalRegistra...
    method AddOrUpdate (line 369) | private IPolicySet AddOrUpdate(Type type, string name, InternalRegistr...
    method GetOrAdd (line 416) | private IPolicySet GetOrAdd(Type type, string name)
    method GetOrAddGeneric (line 476) | private IPolicySet GetOrAddGeneric(Type type, string name, Type defini...
    method Get (line 543) | private IPolicySet Get(Type type, string name)
    method Set (line 561) | private void Set(Type type, string name, IPolicySet value)
    method Get (line 612) | private object Get(Type type, string name, Type policyInterface)
    method Set (line 632) | private void Set(Type type, string name, Type policyInterface, object ...
    method Clear (line 686) | private void Clear(Type type, string name, Type policyInterface)

FILE: src/UnityContainer.Resolution.cs
  method GetDynamicRegistration (line 29) | private IPolicySet GetDynamicRegistration(Type type, string name)
  method CreateRegistration (line 40) | private IPolicySet CreateRegistration(Type type, string name, InternalRe...
  method CreateRegistration (line 60) | private IPolicySet CreateRegistration(Type type, string name)
  method CreateRegistration (line 78) | private IPolicySet CreateRegistration(Type type, Type policyInterface, o...
  method ResolveEnumerable (line 90) | internal IEnumerable<TElement> ResolveEnumerable<TElement>(Func<Type, st...
  method ResolveEnumerable (line 137) | internal IEnumerable<TElement> ResolveEnumerable<TElement>(Func<Type, st...
  method ResolveArray (line 188) | internal static object ResolveArray<TElement>(ref BuilderContext context)

FILE: src/Utility/ContainerConstants.cs
  class Error (line 4) | internal static class Error

FILE: src/Utility/HashHelpers.cs
  class HashHelpers (line 5) | internal static class HashHelpers
    method IsPrime (line 18) | public static bool IsPrime(int candidate)
    method GetPrime (line 33) | public static int GetPrime(int min)
    method GetMinPrime (line 54) | public static int GetMinPrime()
    method ExpandPrime (line 60) | public static int ExpandPrime(int oldSize)

FILE: tests/Performance/Abstracts/BasicBase.cs
  class BasicBase (line 9) | [BenchmarkCategory("Basic")]
    method SetupContainer (line 17) | public virtual void SetupContainer()
    method UnityContainer (line 155) | public virtual object UnityContainer()
    method UnityContainerAsync (line 181) | public virtual object UnityContainerAsync()
    method Unregistered (line 207) | public virtual object Unregistered()
    method Transient (line 233) | public virtual object Transient()
    method Mapping (line 259) | public virtual object Mapping()
    method MappingToSingleton (line 285) | public virtual object MappingToSingleton()
    method GenericInterface (line 311) | public virtual object GenericInterface()
    method Factory (line 337) | public virtual object Factory()
    method Instance (line 363) | public virtual object Instance()
    method LegacyFactory (line 389) | public virtual object LegacyFactory()
    method Array (line 415) | public virtual object Array()
    method Enumerable (line 441) | public virtual object Enumerable()

FILE: tests/Performance/Abstracts/RegistrationBase.cs
  class RegistrationBase (line 8) | [BenchmarkCategory("Registration")]
    method SetupContainer (line 37) | [IterationSetup]
    method Register (line 147) | public virtual object Register()
    method RegisterMapping (line 257) | public virtual object RegisterMapping()
    method RegisterInstance (line 367) | public virtual object RegisterInstance()
    method Registrations (line 477) | public virtual object Registrations()
    method IsRegistered (line 587) | public virtual object IsRegistered()
    method IsRegisteredFalse (line 697) | public virtual object IsRegisteredFalse()

FILE: tests/Performance/Configuration/BenchmarkConfiguration.cs
  class BenchmarkConfiguration (line 7) | public class BenchmarkConfiguration : ManualConfig
    method BenchmarkConfiguration (line 9) | public BenchmarkConfiguration()

FILE: tests/Performance/Data/MultiType.cs
  class MultiType (line 9) | [BenchmarkCategory("Registration")]
    method SetupContainer (line 47) | [IterationSetup]
    type IService (line 58) | public interface IService { }
    class Service (line 59) | public class Service : IService { }
    class Poco (line 60) | public class Poco { }

FILE: tests/Performance/Data/TestData.cs
  class Poco00 (line 7) | public class Poco00 { }
  class Poco01 (line 8) | public class Poco01 { }
  class Poco02 (line 9) | public class Poco02 { }
  class Poco03 (line 10) | public class Poco03 { }
  class Poco04 (line 11) | public class Poco04 { }
  class Poco05 (line 12) | public class Poco05 { }
  class Poco06 (line 13) | public class Poco06 { }
  class Poco07 (line 14) | public class Poco07 { }
  class Poco08 (line 15) | public class Poco08 { }
  class Poco09 (line 16) | public class Poco09 { }
  class Poco10 (line 17) | public class Poco10 { }
  class Poco11 (line 18) | public class Poco11 { }
  class Poco12 (line 19) | public class Poco12 { }
  class Poco13 (line 20) | public class Poco13 { }
  class Poco14 (line 21) | public class Poco14 { }
  class Poco15 (line 22) | public class Poco15 { }
  class Poco16 (line 23) | public class Poco16 { }
  class Poco17 (line 24) | public class Poco17 { }
  class Poco18 (line 25) | public class Poco18 { }
  class Poco19 (line 26) | public class Poco19 { }
  class PocoWithDependency (line 33) | public class PocoWithDependency
    method CallMe (line 38) | [InjectionMethod]
  class PocoWithDependency00 (line 42) | public class PocoWithDependency00 : PocoWithDependency { }
  class PocoWithDependency01 (line 43) | public class PocoWithDependency01 : PocoWithDependency { }
  class PocoWithDependency02 (line 44) | public class PocoWithDependency02 : PocoWithDependency { }
  class PocoWithDependency03 (line 45) | public class PocoWithDependency03 : PocoWithDependency { }
  class PocoWithDependency04 (line 46) | public class PocoWithDependency04 : PocoWithDependency { }
  class PocoWithDependency05 (line 47) | public class PocoWithDependency05 : PocoWithDependency { }
  class PocoWithDependency06 (line 48) | public class PocoWithDependency06 : PocoWithDependency { }
  class PocoWithDependency07 (line 49) | public class PocoWithDependency07 : PocoWithDependency { }
  class PocoWithDependency08 (line 50) | public class PocoWithDependency08 : PocoWithDependency { }
  class PocoWithDependency09 (line 51) | public class PocoWithDependency09 : PocoWithDependency { }
  class PocoWithDependency10 (line 52) | public class PocoWithDependency10 : PocoWithDependency { }
  class PocoWithDependency11 (line 53) | public class PocoWithDependency11 : PocoWithDependency { }
  class PocoWithDependency12 (line 54) | public class PocoWithDependency12 : PocoWithDependency { }
  class PocoWithDependency13 (line 55) | public class PocoWithDependency13 : PocoWithDependency { }
  class PocoWithDependency14 (line 56) | public class PocoWithDependency14 : PocoWithDependency { }
  class PocoWithDependency15 (line 57) | public class PocoWithDependency15 : PocoWithDependency { }
  class PocoWithDependency16 (line 58) | public class PocoWithDependency16 : PocoWithDependency { }
  class PocoWithDependency17 (line 59) | public class PocoWithDependency17 : PocoWithDependency { }
  class PocoWithDependency18 (line 60) | public class PocoWithDependency18 : PocoWithDependency { }
  class PocoWithDependency19 (line 61) | public class PocoWithDependency19 : PocoWithDependency { }
  type IFoo (line 68) | public interface IFoo { }
  type IFoo00 (line 69) | public interface IFoo00 { }
  type IFoo01 (line 70) | public interface IFoo01 { }
  type IFoo02 (line 71) | public interface IFoo02 { }
  type IFoo03 (line 72) | public interface IFoo03 { }
  type IFoo04 (line 73) | public interface IFoo04 { }
  type IFoo05 (line 74) | public interface IFoo05 { }
  type IFoo06 (line 75) | public interface IFoo06 { }
  type IFoo07 (line 76) | public interface IFoo07 { }
  type IFoo08 (line 77) | public interface IFoo08 { }
  type IFoo09 (line 78) | public interface IFoo09 { }
  type IFoo10 (line 79) | public interface IFoo10 { }
  type IFoo11 (line 80) | public interface IFoo11 { }
  type IFoo12 (line 81) | public interface IFoo12 { }
  type IFoo13 (line 82) | public interface IFoo13 { }
  type IFoo14 (line 83) | public interface IFoo14 { }
  type IFoo15 (line 84) | public interface IFoo15 { }
  type IFoo16 (line 85) | public interface IFoo16 { }
  type IFoo17 (line 86) | public interface IFoo17 { }
  type IFoo18 (line 87) | public interface IFoo18 { }
  type IFoo19 (line 88) | public interface IFoo19 { }
  class Foo (line 95) | public class Foo : IFoo { }
  class Foo00 (line 96) | public class Foo00 : IFoo00 { }
  class Foo01 (line 97) | public class Foo01 : IFoo01 { }
  class Foo02 (line 98) | public class Foo02 : IFoo02 { }
  class Foo03 (line 99) | public class Foo03 : IFoo03 { }
  class Foo04 (line 100) | public class Foo04 : IFoo04 { }
  class Foo05 (line 101) | public class Foo05 : IFoo05 { }
  class Foo06 (line 102) | public class Foo06 : IFoo06 { }
  class Foo07 (line 103) | public class Foo07 : IFoo07 { }
  class Foo08 (line 104) | public class Foo08 : IFoo08 { }
  class Foo09 (line 105) | public class Foo09 : IFoo09 { }
  class Foo10 (line 106) | public class Foo10 : IFoo10 { }
  class Foo11 (line 107) | public class Foo11 : IFoo11 { }
  class Foo12 (line 108) | public class Foo12 : IFoo12 { }
  class Foo13 (line 109) | public class Foo13 : IFoo13 { }
  class Foo14 (line 110) | public class Foo14 : IFoo14 { }
  class Foo15 (line 111) | public class Foo15 : IFoo15 { }
  class Foo16 (line 112) | public class Foo16 : IFoo16 { }
  class Foo17 (line 113) | public class Foo17 : IFoo17 { }
  class Foo18 (line 114) | public class Foo18 : IFoo18 { }
  class Foo19 (line 115) | public class Foo19 : IFoo19 { }
  type IFoo (line 122) | public interface IFoo<T> { }
  type IFoo00 (line 123) | public interface IFoo00<T> { }
  type IFoo01 (line 124) | public interface IFoo01<T> { }
  type IFoo02 (line 125) | public interface IFoo02<T> { }
  type IFoo03 (line 126) | public interface IFoo03<T> { }
  type IFoo04 (line 127) | public interface IFoo04<T> { }
  type IFoo05 (line 128) | public interface IFoo05<T> { }
  type IFoo06 (line 129) | public interface IFoo06<T> { }
  type IFoo07 (line 130) | public interface IFoo07<T> { }
  type IFoo08 (line 131) | public interface IFoo08<T> { }
  type IFoo09 (line 132) | public interface IFoo09<T> { }
  type IFoo10 (line 133) | public interface IFoo10<T> { }
  type IFoo11 (line 134) | public interface IFoo11<T> { }
  type IFoo12 (line 135) | public interface IFoo12<T> { }
  type IFoo13 (line 136) | public interface IFoo13<T> { }
  type IFoo14 (line 137) | public interface IFoo14<T> { }
  type IFoo15 (line 138) | public interface IFoo15<T> { }
  type IFoo16 (line 139) | public interface IFoo16<T> { }
  type IFoo17 (line 140) | public interface IFoo17<T> { }
  type IFoo18 (line 141) | public interface IFoo18<T> { }
  type IFoo19 (line 142) | public interface IFoo19<T> { }
  class Foo (line 149) | public class Foo<T> : IFoo<T> { }
  class Foo00 (line 150) | public class Foo00<T> : IFoo00<T> { }
  class Foo01 (line 151) | public class Foo01<T> : IFoo01<T> { }
  class Foo02 (line 152) | public class Foo02<T> : IFoo02<T> { }
  class Foo03 (line 153) | public class Foo03<T> : IFoo03<T> { }
  class Foo04 (line 154) | public class Foo04<T> : IFoo04<T> { }
  class Foo05 (line 155) | public class Foo05<T> : IFoo05<T> { }
  class Foo06 (line 156) | public class Foo06<T> : IFoo06<T> { }
  class Foo07 (line 157) | public class Foo07<T> : IFoo07<T> { }
  class Foo08 (line 158) | public class Foo08<T> : IFoo08<T> { }
  class Foo09 (line 159) | public class Foo09<T> : IFoo09<T> { }
  class Foo10 (line 160) | public class Foo10<T> : IFoo10<T> { }
  class Foo11 (line 161) | public class Foo11<T> : IFoo11<T> { }
  class Foo12 (line 162) | public class Foo12<T> : IFoo12<T> { }
  class Foo13 (line 163) | public class Foo13<T> : IFoo13<T> { }
  class Foo14 (line 164) | public class Foo14<T> : IFoo14<T> { }
  class Foo15 (line 165) | public class Foo15<T> : IFoo15<T> { }
  class Foo16 (line 166) | public class Foo16<T> : IFoo16<T> { }
  class Foo17 (line 167) | public class Foo17<T> : IFoo17<T> { }
  class Foo18 (line 168) | public class Foo18<T> : IFoo18<T> { }
  class Foo19 (line 169) | public class Foo19<T> : IFoo19<T> { }

FILE: tests/Performance/Program.cs
  class Program (line 7) | class Program
    method Main (line 9) | static void Main(string[] args)

FILE: tests/Performance/Tests/Registration/Registration.cs
  class Registration (line 5) | public class Registration : RegistrationBase
    method Register (line 7) | [Benchmark(Description = "Register (No Mapping)", OperationsPerInvoke ...
    method RegisterMapping (line 10) | [Benchmark(Description = "Register Mapping", OperationsPerInvoke = 100)]
    method RegisterInstance (line 13) | [Benchmark(Description = "Register Instance", OperationsPerInvoke = 100)]
    method Registrations (line 16) | [Benchmark(Description = "Registrations.ToArray(100)", OperationsPerIn...
    method IsRegistered (line 19) | [Benchmark(Description = "IsRegistered (True)", OperationsPerInvoke = ...
    method IsRegisteredFalse (line 22) | [Benchmark(Description = "IsRegistered (False)", OperationsPerInvoke =...

FILE: tests/Performance/Tests/Resolution/Compiled.cs
  class Compiled (line 6) | public class Compiled : BasicBase
    method SetupContainer (line 10) | [IterationSetup]
    method UnityContainer (line 18) | [Benchmark(Description = "(" + name + ")     IUnityContainer", Operati...
    method UnityContainerAsync (line 21) | [Benchmark(Description = " IUnityContainerAsync", OperationsPerInvoke ...
    method Factory (line 24) | [Benchmark(Description = "Factory (c,t,n)=>new Foo()", OperationsPerIn...
    method LegacyFactory (line 27) | [Benchmark(Description = "Factory        (with name)", OperationsPerIn...
    method Instance (line 30) | [Benchmark(Description = "Instance", OperationsPerInvoke = 20)]
    method Unregistered (line 33) | [Benchmark(Description = "Unregistered type", OperationsPerInvoke = 20)]
    method Transient (line 36) | [Benchmark(Description = "Registered type with dependencies", Operatio...
    method Mapping (line 39) | [Benchmark(Description = "Registered interface to type mapping", Opera...
    method MappingToSingleton (line 42) | [Benchmark(Description = "Mapping to Singleton", OperationsPerInvoke =...
    method GenericInterface (line 45) | [Benchmark(Description = "Registered generic type mapping", Operations...
    method Array (line 48) | [Benchmark(Description = "Array", OperationsPerInvoke = 20)]
    method Enumerable (line 51) | [Benchmark(Description = "Enumerable", OperationsPerInvoke = 20)]

FILE: tests/Performance/Tests/Resolution/PreCompiled.cs
  class PreCompiled (line 6) | public class PreCompiled : BasicBase
    method SetupContainer (line 10) | [IterationSetup]
    method UnityContainer (line 34) | [Benchmark(Description = "(" + name + ")     IUnityContainer", Operati...
    method UnityContainerAsync (line 37) | [Benchmark(Description = " IUnityContainerAsync", OperationsPerInvoke ...
    method Factory (line 40) | [Benchmark(Description = "Factory (c,t,n)=>new Foo()", OperationsPerIn...
    method LegacyFactory (line 43) | [Benchmark(Description = "Factory        (with name)", OperationsPerIn...
    method Instance (line 46) | [Benchmark(Description = "Instance", OperationsPerInvoke = 20)]
    method Unregistered (line 49) | [Benchmark(Description = "Unregistered type", OperationsPerInvoke = 20)]
    method Transient (line 52) | [Benchmark(Description = "Registered type with dependencies", Operatio...
    method Mapping (line 55) | [Benchmark(Description = "Registered interface to type mapping", Opera...
    method MappingToSingleton (line 58) | [Benchmark(Description = "Mapping to Singleton", OperationsPerInvoke =...
    method GenericInterface (line 61) | [Benchmark(Description = "Registered generic type mapping", Operations...
    method Array (line 64) | [Benchmark(Description = "Array", OperationsPerInvoke = 20)]
    method Enumerable (line 67) | [Benchmark(Description = "Enumerable", OperationsPerInvoke = 20)]

FILE: tests/Performance/Tests/Resolution/PreResolved.cs
  class PreResolved (line 6) | public class PreResolved : BasicBase
    method SetupContainer (line 10) | [IterationSetup]
    method UnityContainer (line 33) | [Benchmark(Description = "(" + name + ")     IUnityContainer", Operati...
    method UnityContainerAsync (line 36) | [Benchmark(Description = " IUnityContainerAsync", OperationsPerInvoke ...
    method Factory (line 39) | [Benchmark(Description = "Factory (c,t,n)=>new Foo()", OperationsPerIn...
    method LegacyFactory (line 42) | [Benchmark(Description = "Factory        (with name)", OperationsPerIn...
    method Instance (line 45) | [Benchmark(Description = "Instance", OperationsPerInvoke = 20)]
    method Unregistered (line 48) | [Benchmark(Description = "Unregistered type", OperationsPerInvoke = 20)]
    method Transient (line 51) | [Benchmark(Description = "Registered type with dependencies", Operatio...
    method Mapping (line 54) | [Benchmark(Description = "Registered interface to type mapping", Opera...
    method GenericInterface (line 57) | [Benchmark(Description = "Registered generic type mapping", Operations...
    method MappingToSingleton (line 60) | [Benchmark(Description = "Mapping to Singleton", OperationsPerInvoke =...
    method Array (line 63) | [Benchmark(Description = "Array", OperationsPerInvoke = 20)]
    method Enumerable (line 66) | [Benchmark(Description = "Enumerable", OperationsPerInvoke = 20)]

FILE: tests/Performance/Tests/Resolution/Resolved.cs
  class Resolved (line 6) | public class Resolved : BasicBase
    method SetupContainer (line 10) | [IterationSetup]
    method UnityContainer (line 18) | [Benchmark(Description = "(" + name + ")     IUnityContainer", Operati...
    method UnityContainerAsync (line 21) | [Benchmark(Description = " IUnityContainerAsync", OperationsPerInvoke ...
    method Factory (line 24) | [Benchmark(Description = "Factory (c,t,n)=>new Foo()", OperationsPerIn...
    method LegacyFactory (line 27) | [Benchmark(Description = "Factory        (with name)", OperationsPerIn...
    method Instance (line 30) | [Benchmark(Description = "Instance", OperationsPerInvoke = 20)]
    method Unregistered (line 33) | [Benchmark(Description = "Unregistered type", OperationsPerInvoke = 20)]
    method Transient (line 36) | [Benchmark(Description = "Registered type with dependencies", Operatio...
    method Mapping (line 39) | [Benchmark(Description = "Registered interface to type mapping", Opera...
    method GenericInterface (line 42) | [Benchmark(Description = "Registered generic type mapping", Operations...
    method MappingToSingleton (line 45) | [Benchmark(Description = "Mapping to Singleton", OperationsPerInvoke =...
    method Array (line 48) | [Benchmark(Description = "Array", OperationsPerInvoke = 20)]
    method Enumerable (line 51) | [Benchmark(Description = "Enumerable", OperationsPerInvoke = 20)]

FILE: tests/Unity.Diagnostic/BuildUp.cs
  class BuildUp (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 22) | public override IUnityContainer GetContainer()
  class BuildUp (line 19) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 22) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Constructor.cs
  class Annotation (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 53) | public override IUnityContainer GetContainer()
  class Parameters (line 17) | [TestClass]
    method GetContainer (line 20) | public override IUnityContainer GetContainer()
    method GetContainer (line 63) | public override IUnityContainer GetContainer()
  class Types (line 27) | [TestClass]
    method GetContainer (line 30) | public override IUnityContainer GetContainer()
    method GetContainer (line 73) | public override IUnityContainer GetContainer()
  class Injection (line 37) | [TestClass]
    method GetContainer (line 40) | public override IUnityContainer GetContainer()
    method GetContainer (line 83) | public override IUnityContainer GetContainer()
  class Annotation (line 50) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 53) | public override IUnityContainer GetContainer()
  class Parameters (line 60) | [TestClass]
    method GetContainer (line 20) | public override IUnityContainer GetContainer()
    method GetContainer (line 63) | public override IUnityContainer GetContainer()
  class Types (line 70) | [TestClass]
    method GetContainer (line 30) | public override IUnityContainer GetContainer()
    method GetContainer (line 73) | public override IUnityContainer GetContainer()
  class Injection (line 80) | [TestClass]
    method GetContainer (line 40) | public override IUnityContainer GetContainer()
    method GetContainer (line 83) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Cyclic.cs
  class Cyclic (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()
  class Cyclic (line 21) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Field.cs
  class Field (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()
  class Field (line 21) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Hierarchical.cs
  class Hierarchical (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 22) | public override IUnityContainer GetContainer()
  class Hierarchical (line 19) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 22) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Issues.cs
  class GitHub (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
  class CodePlex (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Method.cs
  class Parameters (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 33) | public override IUnityContainer GetContainer()
  class Validation (line 17) | [TestClass]
    method GetContainer (line 20) | public override IUnityContainer GetContainer()
    method GetContainer (line 43) | public override IUnityContainer GetContainer()
  class Parameters (line 30) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 33) | public override IUnityContainer GetContainer()
  class Validation (line 40) | [TestClass]
    method GetContainer (line 20) | public override IUnityContainer GetContainer()
    method GetContainer (line 43) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Overrides.cs
  class Override (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()
  class Override (line 21) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Property.cs
  class Property (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()
  class Property (line 21) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()
    method GetContainer (line 24) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Diagnostic/Registration.cs
  class Types (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
  class Instance (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
  class Factory (line 24) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/BuildUp.cs
  class BuildUp (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 22) | public override IUnityContainer GetContainer()
  class BuildUp (line 19) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 22) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Constructor.cs
  class Injection (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 49) | public override IUnityContainer GetContainer()
  class Attribute (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 58) | public override IUnityContainer GetContainer()
  class Parameters (line 24) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 67) | public override IUnityContainer GetContainer()
  class Overrides (line 33) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
    method GetContainer (line 76) | public override IUnityContainer GetContainer()
  class Injection (line 46) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 49) | public override IUnityContainer GetContainer()
  class Attribute (line 55) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 58) | public override IUnityContainer GetContainer()
  class Parameters (line 64) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 67) | public override IUnityContainer GetContainer()
  class Overrides (line 73) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
    method GetContainer (line 76) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Container/Hierachy.cs
  class Hierarchy (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Container/IsRegistered.cs
  class IsRegistered (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Container/Registrations.cs
  class Registrations (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Factory/Registration.cs
  class Registration (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Factory/Resolution.cs
  class Resolution (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Field.cs
  class Attribute (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 41) | public override IUnityContainer GetContainer()
  class Injection (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 50) | public override IUnityContainer GetContainer()
  class Overrides (line 25) | [TestClass]
    method GetContainer (line 28) | public override IUnityContainer GetContainer()
    method GetContainer (line 59) | public override IUnityContainer GetContainer()
  class Attribute (line 38) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 41) | public override IUnityContainer GetContainer()
  class Injection (line 47) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 50) | public override IUnityContainer GetContainer()
  class Overrides (line 56) | [TestClass]
    method GetContainer (line 28) | public override IUnityContainer GetContainer()
    method GetContainer (line 59) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Issues.cs
  class GitHub (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
  class CodePlex (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Lifetime.cs
  class Lifetime (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 21) | public override IUnityContainer GetContainer()
  class Lifetime (line 18) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 21) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Method.cs
  class Attribute (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 59) | public override IUnityContainer GetContainer()
  class Injection (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 68) | public override IUnityContainer GetContainer()
  class Selection (line 24) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 77) | public override IUnityContainer GetContainer()
  class Parameters (line 33) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
    method GetContainer (line 86) | public override IUnityContainer GetContainer()
  class Overrides (line 42) | [TestClass]
    method GetContainer (line 45) | public override IUnityContainer GetContainer()
    method GetContainer (line 95) | public override IUnityContainer GetContainer()
  class Attribute (line 56) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 59) | public override IUnityContainer GetContainer()
  class Injection (line 65) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 68) | public override IUnityContainer GetContainer()
  class Selection (line 74) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 77) | public override IUnityContainer GetContainer()
  class Parameters (line 83) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
    method GetContainer (line 86) | public override IUnityContainer GetContainer()
  class Overrides (line 92) | [TestClass]
    method GetContainer (line 45) | public override IUnityContainer GetContainer()
    method GetContainer (line 95) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Parameter.cs
  class Attribute (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 59) | public override IUnityContainer GetContainer()
  class Injected (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 68) | public override IUnityContainer GetContainer()
  class Resolved (line 24) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 77) | public override IUnityContainer GetContainer()
  class Optional (line 33) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
    method GetContainer (line 86) | public override IUnityContainer GetContainer()
  class Overrides (line 42) | [TestClass]
    method GetContainer (line 45) | public override IUnityContainer GetContainer()
    method GetContainer (line 95) | public override IUnityContainer GetContainer()
  class Attribute (line 56) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 59) | public override IUnityContainer GetContainer()
  class Injected (line 65) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 68) | public override IUnityContainer GetContainer()
  class Resolved (line 74) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 77) | public override IUnityContainer GetContainer()
  class Optional (line 83) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
    method GetContainer (line 86) | public override IUnityContainer GetContainer()
  class Overrides (line 92) | [TestClass]
    method GetContainer (line 45) | public override IUnityContainer GetContainer()
    method GetContainer (line 95) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Property.cs
  class Attribute (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 40) | public override IUnityContainer GetContainer()
  class Injection (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 49) | public override IUnityContainer GetContainer()
  class Override (line 24) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 58) | public override IUnityContainer GetContainer()
  class Attribute (line 37) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
    method GetContainer (line 40) | public override IUnityContainer GetContainer()
  class Injection (line 46) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
    method GetContainer (line 49) | public override IUnityContainer GetContainer()
  class Override (line 55) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
    method GetContainer (line 58) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Registration.cs
  class Native (line 6) | [TestClass]
    method GetContainer (line 9) | public override IUnityContainer GetContainer()
  class Extended (line 15) | [TestClass]
    method GetContainer (line 18) | public override IUnityContainer GetContainer()
  class Syntax (line 24) | [TestClass]
    method GetContainer (line 27) | public override IUnityContainer GetContainer()
  class Factory (line 33) | [TestClass]
    method GetContainer (line 36) | public override IUnityContainer GetContainer()
  class Instance (line 42) | [TestClass]
    method GetContainer (line 45) | public override IUnityContainer GetContainer()
  class Types (line 51) | [TestClass]
    method GetContainer (line 54) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Array.cs
  class Array (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Basics.cs
  class Basics (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Deferred.cs
  class Deferred (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Enumerable.cs
  class Enumerable (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Generic.cs
  class Generic (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Lazy.cs
  class Lazy (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Mapping.cs
  class Mapping (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Specification/Resolution/Overrides.cs
  class Overrides (line 7) | [TestClass]
    method GetContainer (line 10) | public override IUnityContainer GetContainer()

FILE: tests/Unity.Tests/ChildContainer/ChildContainerInterfaceChangeFixture.cs
  class ChildContainerInterfaceChangeFixture (line 10) | [TestClass]
    method CheckParentContOfChild (line 16) | [TestMethod]
    method CheckParentContOfParent (line 30) | [TestMethod]
    method ChildInheritsParentsConfiguration_RegisterTypeResolve (line 44) | [TestMethod]
    method ChildInheritsParentsConfiguration_RegisterInstanceResolve (line 61) | [TestMethod]
    method ChildInheritsParentsConfiguration_RegisterTypeResolveAll (line 80) | [TestMethod]
    method ChildInheritsParentsConfiguration_RegisterInstanceResolveAll (line 100) | [TestMethod]
    method RegisterSameTypeInChildAndParentOverriden (line 124) | [TestMethod]
    method ChangeInParentConfigurationIsReflectedInChild (line 143) | [TestMethod]
    method WhenDisposingParentChildDisposes (line 161) | [TestMethod]
    method ParentNotDisposedWhenChildDisposed (line 177) | [TestMethod]
    method ChainOfContainers (line 195) | [TestMethod]

FILE: tests/Unity.Tests/ChildContainer/ITestContainer.cs
  type ITestContainer (line 3) | public interface ITestContainer

FILE: tests/Unity.Tests/ChildContainer/TestContainer.cs
  class TestContainer (line 5) | public class TestContainer : ITestContainer, IDisposable
    method Dispose (line 15) | public void Dispose()

FILE: tests/Unity.Tests/ChildContainer/TestContainer1.cs
  class TestContainer1 (line 3) | public class TestContainer1 : ITestContainer

FILE: tests/Unity.Tests/ChildContainer/TestContainer2.cs
  class TestContainer2 (line 3) | public class TestContainer2 : ITestContainer

FILE: tests/Unity.Tests/ChildContainer/TestContainer3.cs
  class TestContainer3 (line 5) | public class TestContainer3 : ITestContainer, IDisposable
    method Dispose (line 15) | public void Dispose()

FILE: tests/Unity.Tests/CollectionSupport/CollectionSupportFixture.cs
  class CollectionSupportFixture (line 10) | [TestClass]
    method ResolvingEnumTypeSucceedsIfItWasNotRegistered (line 13) | [TestMethod]
    method ClosedGenericsWinInArray (line 22) | [TestMethod]
    type IFoo (line 44) | public interface IFoo<TEntity>
    class Foo (line 49) | public class Foo<TEntity> : IFoo<TEntity>
      method Foo (line 51) | public Foo()
      method Foo (line 55) | public Foo(TEntity value)
    type IService (line 63) | public interface IService
    type IOtherService (line 67) | public interface IOtherService
    class Service (line 71) | public class Service : IService, IDisposable
      method Service (line 77) | public Service()
      method Dispose (line 83) | public void Dispose()
    class OtherService (line 89) | public class OtherService : IService, IOtherService, IDisposable
      method OtherService (line 91) | [InjectionConstructor]
      method OtherService (line 97) | public OtherService(IUnityContainer container)
      method Dispose (line 104) | public void Dispose()
    method ResolvingAnArrayTypeSucceedsIfItWasNotRegistered (line 111) | [TestMethod]
    method ResolvingAnArrayWithFactory (line 119) | [TestMethod]
    method ResolvingEnumWithFactory (line 133) | [TestMethod]
    method ResolvingEnumWithMap (line 147) | [TestMethod]
    method ResolvingAnArrayTypeSucceedsIfItWasRegistered (line 158) | [TestMethod]
    method ResolvingAllRegistratiosnForaTypeReturnsAnEmptyArrayWhenNothingIsRegisterd (line 170) | [TestMethod]
    method ResolvingAllRegistratiosnForaTypeReturnsAnEquivalentArrayWhenItemsAreRegisterd (line 181) | [TestMethod]
    method InjectingAnArrayTypeSucceedsIfItWasNotRegistered (line 195) | [TestMethod]
    method InjectingAnArrayTypeSucceedsIfItWasRegistered (line 203) | [TestMethod]
    method InjectingAnArrayDependencySucceedsIfNoneWereRegistered (line 215) | [TestMethod]
    method InjectingAnArrayDependencySucceedsIfSomeWereRegistered (line 225) | [TestMethod]
    method ConstructingAnDependencyArrayWithNoRegisteredElementsSucceeds (line 238) | [TestMethod]
    method ConstructingAnDependencyArrayWithRegisteredElementsSucceeds (line 248) | [TestMethod]
    method ConstructingAnDependencyArrayTypeSucceedsIfItWasNotRegistered (line 261) | [TestMethod]
    method ConstructingWithMethodInjectionAnDependencyArrayWithNoRegisteredElementsSucceeds (line 269) | [TestMethod]
    method ConstructingWithMethodInjectionAnDependencyArrayWithRegisteredElementsSucceeds (line 279) | [TestMethod]
    method ConstructingWithMethodInjectionAnDependencyArrayTypeSucceedsIfItWasNotRegistered (line 292) | [TestMethod]

FILE: tests/Unity.Tests/CollectionSupport/ConfigurationTestClass.cs
  class ConfigurationTestClass (line 3) | public class ConfigurationTestClass
    method InjectionMethod (line 26) | public void InjectionMethod(TestClass[] arrayMethod)
    method ConfigurationTestClass (line 31) | [InjectionConstructor]
    method ConfigurationTestClass (line 35) | public ConfigurationTestClass(TestClass[] arrayCtor)

FILE: tests/Unity.Tests/CollectionSupport/ConfigurationTestClassGeneric.cs
  class ConfigurationTestClassGeneric (line 3) | public class ConfigurationTestClassGeneric<T>
    method InjectionMethod (line 26) | public void InjectionMethod(T[] arrayMethod)
    method ConfigurationTestClassGeneric (line 31) | [InjectionConstructor]
    method ConfigurationTestClassGeneric (line 35) | public ConfigurationTestClassGeneric(T[] arrayCtor)

FILE: tests/Unity.Tests/CollectionSupport/ITestInterface.cs
  type ITestInterface (line 3) | public interface ITestInterface

FILE: tests/Unity.Tests/CollectionSupport/TestClass.cs
  class TestClass (line 5) | public class TestClass : ITestInterface

FILE: tests/Unity.Tests/CollectionSupport/TestClassDerived.cs
  class TestClassDerived (line 3) | public class TestClassDerived : TestClass { }

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithArrayDependency.cs
  class TestClassWithArrayDependency (line 3) | public class TestClassWithArrayDependency

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithDependencyArrayConstructor.cs
  class TestClassWithDependencyArrayConstructor (line 3) | public class TestClassWithDependencyArrayConstructor
    method TestClassWithDependencyArrayConstructor (line 7) | public TestClassWithDependencyArrayConstructor(TestClass[] dependency)

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithDependencyArrayMethod.cs
  class TestClassWithDependencyArrayMethod (line 3) | public class TestClassWithDependencyArrayMethod
    method Injector (line 7) | [InjectionMethod]

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithDependencyArrayProperty.cs
  class TestClassWithDependencyArrayProperty (line 3) | public class TestClassWithDependencyArrayProperty

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithDependencyEnumerableConstructor.cs
  class TestClassWithDependencyEnumerableConstructor (line 5) | public class TestClassWithDependencyEnumerableConstructor
    method TestClassWithDependencyEnumerableConstructor (line 9) | public TestClassWithDependencyEnumerableConstructor(IEnumerable<TestCl...

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithDependencyTypeConstructor.cs
  class TestClassWithDependencyTypeConstructor (line 3) | public class TestClassWithDependencyTypeConstructor
    method TestClassWithDependencyTypeConstructor (line 7) | public TestClassWithDependencyTypeConstructor(TestClass[] dependency)

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithDependencyTypeMethod.cs
  class TestClassWithDependencyTypeMethod (line 3) | public class TestClassWithDependencyTypeMethod
    method Injector (line 7) | [InjectionMethod]

FILE: tests/Unity.Tests/CollectionSupport/TestClassWithEnumerableDependency.cs
  class TestClassWithEnumerableDependency (line 5) | public class TestClassWithEnumerableDependency

FILE: tests/Unity.Tests/Container/ContainerBuildUpFixture.cs
  class ContainerBuildUpFixture (line 8) | [TestClass]
    method BuildNullObject1 (line 13) | [TestMethod]
    method BuildNullObject2 (line 27) | [TestMethod]
    method BuildNullObject3 (line 36) | [TestMethod]
    method BuildNullObject4 (line 45) | [TestMethod]
    method BuildNullObject5 (line 54) | [TestMethod]
    method BuildNullObject6 (line 64) | [TestMethod]
    method BuildNullObject7 (line 74) | [TestMethod]
    method BuildNullObject8 (line 86) | [TestMethod]
    method BuildNullObject9 (line 98) | [TestMethod]
    method BuildUpPrimitiveAndDotNetClassTest (line 110) | [TestMethod]
    method BuildNullObject10 (line 121) | [TestMethod]
    method BuildNullObject11 (line 133) | [TestMethod]
    class SimpleClass (line 143) | public class SimpleClass
    method BuildUnmatchedObject1 (line 160) | [TestMethod]
    class BuildUnmatchedObject1_TestClass (line 171) | public class BuildUnmatchedObject1_TestClass
    method BuildBaseAndChildObject1 (line 187) | [TestMethod]
    method BuildBaseAndChildObject2 (line 213) | [TestMethod]
    type Interface1 (line 229) | public interface Interface1
    class BaseStub1 (line 239) | public class BaseStub1 : Interface1
    class ChildStub1 (line 258) | public class ChildStub1 : BaseStub1
    method BuildAbstractBaseAndChildObject2 (line 274) | [TestMethod]
    class AbstractBase (line 290) | public abstract class AbstractBase
      method AbstractMethod (line 301) | public abstract void AbstractMethod();
    class ConcreteChild (line 304) | public class ConcreteChild : AbstractBase
      method AbstractMethod (line 306) | public override void AbstractMethod()
    method BuildContainedObject1 (line 318) | [TestMethod]
    class MainClass (line 334) | public class MainClass
    class ContainnedClass (line 346) | public class ContainnedClass
    class ObjectUsingLogger (line 368) | private class ObjectUsingLogger
      method BuildUpTest (line 370) | [InjectionMethod]
    method GetObject1 (line 381) | [TestMethod]
    method GetObject2 (line 390) | [TestMethod]
    method GetObject3 (line 399) | [TestMethod]
    method GetObject4 (line 408) | [TestMethod]
    method GetObject5 (line 417) | [TestMethod]
    method GetObject6 (line 426) | [TestMethod]
    class GetTestClass1 (line 440) | public class GetTestClass1

FILE: tests/Unity.Tests/Container/ContainerControlledLifetimeThreadingFixture.cs
  class ContainerControlledLifetimeThreadingFixture (line 13) | [TestClass]
    method SameInstanceFromMultipleThreads (line 16) | [TestMethod]
    method ContainerControlledLifetimeDoesNotLeaveHangingLockIfBuildThrowsException (line 50) | [TestMethod]
    class DelayStrategy (line 101) | private class DelayStrategy : BuilderStrategy
      method PreBuildUp (line 105) | public override void PreBuildUp(ref BuilderContext context)
    class ThrowingStrategy (line 114) | private class ThrowingStrategy : BuilderStrategy
      method PreBuildUp (line 118) | public override void PreBuildUp(ref BuilderContext context)

FILE: tests/Unity.Tests/Container/ContainerDefaultContentFixture.cs
  class ContainerDefaultContentFixture (line 5) | [TestClass]
    method WhenResolvingAnIUnityContainerItResolvesItself (line 8) | [TestMethod]
    method WhenResolveingAnIUnityContainerForAChildContainerItResolvesTheChildContainer (line 18) | [TestMethod]
    method AClassThatHasADependencyOnTheContainerGetsItInjected (line 29) | [TestMethod]
    class IUnityContainerInjectionClass (line 40) | public class IUnityContainerInjectionClass

FILE: tests/Unity.Tests/Container/SeparateContainerFixture.cs
  class SeperateContainerFixture (line 7) | [TestClass]
    method GetObject (line 10) | [TestMethod]
    method RecursiveDependencies (line 19) | [TestMethod]
    method CheckPropertyInjectionWorks (line 29) | [TestMethod]
    method CheckPropertyDependencyInjectionWorks (line 40) | [TestMethod]
    method Check2PropertyDependencyInjectionWorks (line 51) | [TestMethod]
    method Check2PropertyDependencyBuildUpWorks (line 63) | [TestMethod]
    method CheckMultipleDependencyNonDependencyInjectionWorks (line 79) | [TestMethod]
    method TwoInstancesAreNotSame (line 91) | [TestMethod]
    method SingletonsAreSame (line 101) | [TestMethod]
    method NamedUnnamedSingletonareNotSame (line 113) | [TestMethod]
  class MyDependency (line 127) | public class MyDependency
    method MyDependency (line 131) | public MyDependency(object obj)
  class MyDependency1 (line 137) | public class MyDependency1
    method MyDependency1 (line 141) | public MyDependency1(object obj)
    method MyDependency1 (line 146) | [InjectionConstructor]
  class MultipleConstructors (line 153) | public class MultipleConstructors
    method MultipleConstructors (line 155) | public MultipleConstructors()
    method MultipleConstructors (line 160) | public MultipleConstructors(object obj)
  class MySetterInjectionClass (line 166) | public class MySetterInjectionClass
  class MySetterDependencyClass (line 171) | public class MySetterDependencyClass
  class MySetterDependencyNonDependencyClass (line 177) | public class MySetterDependencyNonDependencyClass
  class My2PropertyDependencyClass (line 185) | public class My2PropertyDependencyClass
  class MyMethodDependencyClass (line 194) | public class MyMethodDependencyClass
    method Initialize (line 198) | [InjectionMethod]
  type IMySingeltonInterface (line 210) | internal interface IMySingeltonInterface
  class MyFirstSingetonclass (line 214) | internal class MyFirstSingetonclass : IMySingeltonInterface
  class MySecondSingetonclass (line 218) | internal class MySecondSingetonclass : IMySingeltonInterface
  type IMyClass (line 222) | internal interface IMyClass
  class MyBaseClass (line 226) | internal class MyBaseClass : IMyClass
  class MyClassDerivedBaseClass (line 230) | internal class MyClassDerivedBaseClass : MyBaseClass
  class MyDisposeClass (line 234) | internal class MyDisposeClass : IDisposable
    method Dispose (line 238) | public void Dispose()
  type IMyInterface (line 244) | internal interface IMyInterface
  type ITemporary (line 248) | internal interface ITemporary
  class Temp (line 252) | public class Temp : ITemporary
  class Temporary (line 256) | internal class Temporary : ITemporary

FILE: tests/Unity.Tests/Container/UnityExtensionFixture.cs
  class UnityExtensionFixture (line 8) | [TestClass]
    method ContainerCallsExtensionsInitializeMethod (line 11) | [TestMethod]
    method ExtensionReceivesExtensionContextInInitialize (line 21) | [TestMethod]
    method CanGetConfigurationInterfaceFromExtension (line 32) | [TestMethod]
    method CanGetConfigurationWithoutGenericMethod (line 45) | [TestMethod]
    method ExtensionCanAddStrategy (line 58) | [TestMethod]
    method ExtensionCanAddPolicy (line 72) | [TestMethod]
    method CanLookupExtensionByClassName (line 89) | [TestMethod]
    method ContainerRaisesChildContainerCreatedToExtension (line 101) | [TestMethod]
    method ChildContainerCreatedEventGivesChildContainerToExtension (line 119) | [TestMethod]
    method CanAddExtensionWithNonDefaultConstructor (line 137) | [TestMethod]

FILE: tests/Unity.Tests/Container/UnityHierarchyFixture.cs
  class UnityHierarchyFixture (line 11) | [TestClass]
    method ChildBuildsUsingParentsConfiguration (line 14) | [TestMethod]
    method NamesRegisteredInParentAppearInChild (line 27) | [TestMethod]
    method NamesRegisteredInParentAppearInChildGetAll (line 40) | [TestMethod]
    method ChildConfigurationOverridesParentConfiguration (line 55) | [TestMethod]
    method ChangeInParentConfigurationIsReflectedInChild (line 70) | [TestMethod]
    method ChildExtensionDoesntAffectParent (line 85) | [TestMethod]
    method DisposingParentDisposesChild (line 105) | [TestMethod]
    method CanDisposeChildWithoutDisposingParent (line 118) | [TestMethod]

FILE: tests/Unity.Tests/ContainerRegistration/AnotherTypeImplementation.cs
  class AnotherTypeImplementation (line 4) | internal class AnotherTypeImplementation : ITypeAnotherInterface
    method AnotherTypeImplementation (line 8) | public AnotherTypeImplementation()
    method AnotherTypeImplementation (line 12) | public AnotherTypeImplementation(string name)
    method GetName (line 19) | public string GetName()

FILE: tests/Unity.Tests/ContainerRegistration/GivenContainerIntrospectionCorrectUsageFixture.cs
  class GivenContainerIntrospectionCorrectUsageFixture (line 6) | [TestClass]
    method Init (line 11) | [TestInitialize]
    method WhenIsRegisteredIsCalledForDefaultTypeFromChildContainer (line 17) | [TestMethod]
    method WhenIsRegisteredIsCalledForDefaultTypeRegisteredOnChildContainerFromParent (line 33) | [TestMethod]
    method WhenIsRegisteredIsCalledForDefaultType (line 49) | [TestMethod]
    method WhenIsRegisteredIsCalledForSpecificName (line 60) | [TestMethod]
    method WhenIsRegisteredGenericIsCalledForDefaultType (line 71) | [TestMethod]
    method WhenIsRegisteredGenericIsCalledForSpecificName (line 82) | [TestMethod]

FILE: tests/Unity.Tests/ContainerRegistration/ITypeAnotherInterface.cs
  type ITypeAnotherInterface (line 4) | internal interface ITypeAnotherInterface
    method GetName (line 6) | string GetName();

FILE: tests/Unity.Tests/ContainerRegistration/ITypeInterface.cs
  type ITypeInterface (line 3) | internal interface ITypeInterface
    method GetName (line 5) | string GetName();

FILE: tests/Unity.Tests/ContainerRegistration/TypeImplementation.cs
  class TypeImplementation (line 3) | internal class TypeImplementation : ITypeInterface
    method TypeImplementation (line 7) | public TypeImplementation()
    method TypeImplementation (line 11) | public TypeImplementation(string name)
    method GetName (line 18) | public string GetName()

FILE: tests/Unity.Tests/Extensions/DefaultLifetimeExtensionTests.cs
  class DefaultLifetimeExtensionTests (line 7) | [TestClass]
    method Register (line 10) | [TestMethod]
    method Defaults (line 24) | [TestMethod]
    method GetSetValidation (line 41) | [TestMethod]
    method TypeNull (line 61) | [TestMethod]
    method InstanceNull (line 76) | [TestMethod]
    method FactoryNull (line 91) | [TestMethod]
  class TestLifetimeManager (line 109) | public class TestLifetimeManager : LifetimeManager,
    method OnCreateLifetimeManager (line 114) | protected override LifetimeManager OnCreateLifetimeManager() =>

FILE: tests/Unity.Tests/Extensions/DiagnosticExtensionTests.cs
  class DiagnosticExtensionTests (line 7) | [TestClass]
    method Register (line 10) | [TestMethod]
    method ErrorMessage (line 24) | [TestMethod]
    method DisposableExtensionsAreDisposedWithContainerButNotRemoved (line 41) | [TestMethod]
    method OnlyDisposableExtensionAreDisposed (line 54) | [TestMethod]
    method CanSafelyDisposeContainerTwice (line 69) | [TestMethod]
    method AddMyCustonExtensionToContainer (line 83) | [TestMethod]
    method CheckExtensionAddedToContainer (line 95) | [TestMethod]
    method AddExtensionGetObject (line 108) | [TestMethod]
    method AddDefaultAndCustomExtensions (line 124) | [TestMethod]
    method AddExtensionSetLifetime (line 139) | [TestMethod]
    class DisposableExtension (line 153) | private class DisposableExtension : UnityContainerExtension, IDisposable
      method Initialize (line 158) | protected override void Initialize()
      method Remove (line 162) | public override void Remove()
      method Dispose (line 167) | public void Dispose()
    class NoopExtension (line 177) | private class NoopExtension : UnityContainerExtension
      method Initialize (line 179) | protected override void Initialize()

FILE: tests/Unity.Tests/Extensions/LegacyExtensionTests.cs
  class LegacyExtensionTests (line 6) | [TestClass]
    method Register (line 9) | [TestMethod]
    method SmartByDefault (line 23) | [TestMethod]
    method LegacySelection (line 36) | [TestMethod]
    method LegacySelectionDiagnostic (line 51) | [TestMethod]
    method CorrectLegacySelection (line 67) | [TestMethod]
  class ObjectWithMultipleConstructors (line 85) | public class ObjectWithMultipleConstructors
    method ObjectWithMultipleConstructors (line 95) | public ObjectWithMultipleConstructors(int first)
    method ObjectWithMultipleConstructors (line 100) | public ObjectWithMultipleConstructors(object first, IUnityContainer se...
    method ObjectWithMultipleConstructors (line 105) | public ObjectWithMultipleConstructors(object first, string second, IUn...

FILE: tests/Unity.Tests/Generics/ClassWithConstMethodandProperty.cs
  class ClassWithConstMethodandProperty (line 3) | public class ClassWithConstMethodandProperty<T>
    method ClassWithConstMethodandProperty (line 6) | public ClassWithConstMethodandProperty()
    method ClassWithConstMethodandProperty (line 8) | public ClassWithConstMethodandProperty(T value)
    method SetValue (line 19) | public void SetValue(T value)

FILE: tests/Unity.Tests/Generics/Foo.cs
  class Foo (line 4) | public class Foo<TEntity> : IFoo<TEntity>
    method Foo (line 6) | public Foo()
    method Foo (line 10) | public Foo(TEntity value)
  class Foo (line 18) | public class Foo : IFoo
    method Foo (line 6) | public Foo()
    method Foo (line 10) | public Foo(TEntity value)

FILE: tests/Unity.Tests/Generics/FooRepository.cs
  class FooRepository (line 4) | public class FooRepository : IRepository<Foo>

FILE: tests/Unity.Tests/Generics/GenMockLogger.cs
  class GenMockLogger (line 3) | public class GenMockLogger : IGenLogger

FILE: tests/Unity.Tests/Generics/GenSpecialLogger.cs
  class GenSpecialLogger (line 3) | public class GenSpecialLogger : IGenLogger

FILE: tests/Unity.Tests/Generics/GenericA.cs
  class GenericA (line 3) | public class GenericA { }

FILE: tests/Unity.Tests/Generics/GenericB.cs
  class GenericB (line 3) | public class GenericB { }

FILE: tests/Unity.Tests/Generics/GenericC.cs
  class GenericC (line 3) | public class GenericC { }

FILE: tests/Unity.Tests/Generics/GenericChainingFixture.cs
  class GenericChainingFixture (line 11) | [TestClass]
    method CanSpecializeGenericTypes (line 14) | [TestMethod]
    method ConfiguringConstructorThatTakesOpenGenericTypeDoesNotThrow (line 23) | [TestMethod]
    method CanConfigureGenericMethodInjectionInContainer (line 31) | [TestMethod]
    method CanConfigureInjectionForNonGenericMethodOnGenericClass (line 42) | [TestMethod]
    method CanCallDefaultConstructorOnGeneric (line 56) | [TestMethod]
    method CanConfigureInjectionForGenericProperty (line 71) | [TestMethod]
    method CanInjectNonGenericPropertyOnGenericClass (line 82) | [TestMethod]
    method ContainerControlledOpenGenericsAreDisposed (line 93) | [TestMethod]
  type ICommand (line 110) | public interface ICommand<T>
    method Execute (line 112) | void Execute(T data);
    method ChainedExecute (line 113) | void ChainedExecute(ICommand<T> inner);
  class ConcreteCommand (line 117) | public class ConcreteCommand<T> : ICommand<T>
    method Execute (line 121) | public void Execute(T data)
    method ChainedExecute (line 125) | public void ChainedExecute(ICommand<T> inner)
  class LoggingCommand (line 137) | public class LoggingCommand<T> : ICommand<T>
    method LoggingCommand (line 144) | public LoggingCommand(ICommand<T> inner)
    method LoggingCommand (line 149) | public LoggingCommand()
    method Execute (line 159) | public void Execute(T data)
    method ChainedExecute (line 165) | public void ChainedExecute(ICommand<T> innerCommand)
    method InjectMe (line 170) | public void InjectMe()
  class DisposableCommand (line 177) | public class DisposableCommand<T> : ICommand<T>, IDisposable
    method Execute (line 181) | public void Execute(T data)
    method ChainedExecute (line 185) | public void ChainedExecute(ICommand<T> inner)
    method Dispose (line 189) | public void Dispose()
  class Pathological (line 196) | public class Pathological<T1, T2>
    method Pathological (line 198) | public Pathological(ICommand<T2> cmd1, ICommand<T1> cmd2)
  class User (line 210) | public class User
    method DoSomething (line 212) | public void DoSomething(string message)
  class Account (line 217) | public class Account
  type Customer (line 222) | public struct Customer

FILE: tests/Unity.Tests/Generics/GenericConstraintsFixture.cs
  class GenericConstraintsFixture (line 6) | [TestClass]
    type IFoo (line 9) | interface IFoo<T>
    class Foo (line 13) | class Foo<T> : IFoo<T> where T : struct
    method ThrowsAppropriateExceptionWhenGenericArgumentFailsToMeetConstraintsOfMappedToType (line 17) | [TestMethod]
    method CanResolveOpenGenericInterfaceWithConstraintsInMappedToTypeWhenConstraintsAreMet (line 27) | [TestMethod]

FILE: tests/Unity.Tests/Generics/GenericD.cs
  class GenericD (line 3) | public class GenericD { }

FILE: tests/Unity.Tests/Generics/GenericList.cs
  class GenericList (line 3) | public class GenericList<T>
    method Add (line 5) | private void Add(T input) { }

FILE: tests/Unity.Tests/Generics/GenericParameterFixture.cs
  class GenericParameterFixture (line 12) | [TestClass]
    method CanCallNonGenericConstructorOnOpenGenericType (line 15) | [TestMethod]
    method CanCallConstructorTakingGenericParameter (line 27) | [TestMethod]
    method CanConfiguredNamedResolutionOfGenericParameter (line 41) | [TestMethod]
    class ClassWithOneGenericParameter (line 58) | public class ClassWithOneGenericParameter<T>
      method ClassWithOneGenericParameter (line 62) | public ClassWithOneGenericParameter(string s, object o)
      method ClassWithOneGenericParameter (line 66) | public ClassWithOneGenericParameter(T injectedValue)
    class GenericTypeWithMultipleGenericTypeParameters (line 72) | public class GenericTypeWithMultipleGenericTypeParameters<T, U>
      method GenericTypeWithMultipleGenericTypeParameters (line 78) | [InjectionConstructor]
      method GenericTypeWithMultipleGenericTypeParameters (line 83) | public GenericTypeWithMultipleGenericTypeParameters(T theT)
      method GenericTypeWithMultipleGenericTypeParameters (line 88) | public GenericTypeWithMultipleGenericTypeParameters(U theU)
      method Set (line 93) | public void Set(T theT)
      method Set (line 98) | public void Set(U theU)
      method SetAlt (line 103) | public void SetAlt(T theT)
      method SetAlt (line 108) | public void SetAlt(string value)

FILE: tests/Unity.Tests/Generics/GenericResolvedArrayParameterFixture.cs
  class GenericResolvedArrayParameterFixture (line 8) | [TestClass]
    method MatchesArrayOfGenericTypeOnly (line 11) | [TestMethod]
    method CanCallConstructorTakingGenericParameterArray (line 32) | [TestMethod]
    method CanCallConstructorTakingGenericParameterArrayWithValues (line 55) | [TestMethod]
    method CanSetPropertyWithGenericParameterArrayType (line 82) | [TestMethod]
    method AppropriateExceptionIsThrownWhenNoMatchingConstructorCanBeFound (line 105) | [TestMethod]
    method GetT (line 114) | private void GetT<T>() { }
    method GetU (line 115) | private void GetU<U>() { }
    class ClassWithOneArrayGenericParameter (line 117) | public class ClassWithOneArrayGenericParameter<T>
      method ClassWithOneArrayGenericParameter (line 122) | public ClassWithOneArrayGenericParameter()
      method ClassWithOneArrayGenericParameter (line 127) | public ClassWithOneArrayGenericParameter(T[] injectedValue)
    class ClassWithOneGenericParameter (line 141) | public class ClassWithOneGenericParameter<T>

FILE: tests/Unity.Tests/Generics/GenericsFixture.cs
  class GenericsFixture (line 14) | [TestClass]
    class GenericArrayPropertyDependency (line 17) | public class GenericArrayPropertyDependency<T>
    method ResolveConfiguredGenericType (line 26) | [TestMethod]
    method CanRegisterGenericTypesAndResolveThem (line 45) | [TestMethod]
    method CanSpecializeGenericsViaTypeMappings (line 64) | [TestMethod]
    method Testmethod_NoLifetimeSpecified (line 82) | [TestMethod]
    method TypeMappingWithExternallyControlled (line 97) | [TestMethod]
    method Testmethod_ListOfString (line 112) | [TestMethod]
    method Testmethod_ListOfObjectType (line 128) | [TestMethod]
    method Testmethod_ImplementConstructorInjection (line 143) | [TestMethod]
    method Testmethod_ConstrucotorInjectionGenerics (line 159) | [TestMethod]
    method Testmethod_GenericStack (line 175) | [TestMethod]
    method Testmethod_CheckPropInjection (line 185) | [TestMethod]
    type IService (line 195) | public interface IService<T> { }
    class ServiceA (line 196) | public class ServiceA<T> : IService<T> { }
    class ServiceB (line 197) | public class ServiceB<T> : IService<T> { }
    method FailedResolveAllTest (line 199) | [TestMethod]
    method FailedResolveEnumerableTest (line 211) | [TestMethod]
    method CanResolveOpenGenericCollections (line 225) | [TestMethod]
    class ServiceStruct (line 238) | public class ServiceStruct<T> : IService<T> where T : struct { }
    method CanResolveStructConstraintsCollections (line 240) | [TestMethod]
    class ServiceClass (line 260) | public class ServiceClass<T> : IService<T> where T : class { }
    method CanResolveClassConstraintsCollections (line 262) | [TestMethod]
    class ServiceNewConstraint (line 282) | public class ServiceNewConstraint<T> : IService<T> where T : new() { }
    class TypeWithNoPublicNoArgCtors (line 284) | public class TypeWithNoPublicNoArgCtors
      method TypeWithNoPublicNoArgCtors (line 286) | public TypeWithNoPublicNoArgCtors(int _) { }
      method TypeWithNoPublicNoArgCtors (line 287) | private TypeWithNoPublicNoArgCtors() { }
    method CanResolveDefaultCtorConstraintsCollections (line 290) | [TestMethod]
    class ServiceInterfaceConstraint (line 310) | public class ServiceInterfaceConstraint<T> : IService<T> where T : IEn...
    method CanResolveInterfaceConstraintsCollections (line 312) | [TestMethod]

FILE: tests/Unity.Tests/Generics/GenericsReflectionExperimentsFixture.cs
  class GenericsReflectionExperimentsFixture (line 13) | [TestClass]
    method ConcreteGenericTypes_ReturnConstructorThatTakeGenericsInReflection (line 17) | [TestMethod]
    method OpenGenericTypes_GenericPropertiesAreReturnedByReflection (line 27) | [TestMethod]
    method GivenGenericConstructorParameters_CanGetConcreteConstructor (line 35) | [TestMethod]
    method CanFigureOutOpenTypeDefinitionsForParameters (line 72) | [TestMethod]
    method CanDistinguishOpenAndClosedGenerics (line 89) | [TestMethod]
    method CanFindClosedConstructorFromOpenConstructorInfo (line 101) | [TestMethod]
    method ConstructorHasGenericArguments (line 143) | [TestMethod]
    method ConstructorDoesNotHaveGenericArguments (line 150) | [TestMethod]
    method ClosedTypeFromOpenParameter (line 157) | private Type ClosedTypeFromOpenParameter(ParameterInfo openGenericPara...
    method HasOpenGenericParameters (line 168) | private bool HasOpenGenericParameters(ConstructorInfo ctor)
    method Types (line 181) | private static Type[] Types(params Type[] t)

FILE: tests/Unity.Tests/Generics/HaveAGenericType.cs
  class HaveAGenericType (line 4) | public class HaveAGenericType<T1> : IHaveAGenericType<T1>
    method HaveAGenericType (line 6) | public HaveAGenericType()
    method HaveAGenericType (line 9) | public HaveAGenericType(T1 t1Value)
    method Set (line 22) | public void Set(T1 value)

FILE: tests/Unity.Tests/Generics/HaveManyGenericTypes.cs
  class HaveManyGenericTypes (line 4) | public class HaveManyGenericTypes<T1, T2, T3, T4> : IHaveManyGenericType...
    method HaveManyGenericTypes (line 6) | public HaveManyGenericTypes()
    method HaveManyGenericTypes (line 9) | public HaveManyGenericTypes(T1 t1Value)
    method HaveManyGenericTypes (line 14) | public HaveManyGenericTypes(T2 t2Value)
    method HaveManyGenericTypes (line 19) | public HaveManyGenericTypes(T2 t2Value, T1 t1Value)
    method Set (line 57) | public void Set(T1 t1Value)
    method Set (line 62) | public void Set(T2 t2Value)
    method Set (line 67) | public void Set(T3 t3Value)
    method Set (line 72) | public void Set(T4 t4Value)
    method SetMultiple (line 77) | public void SetMultiple(T4 t4Value, T3 t3Value)

FILE: tests/Unity.Tests/Generics/HaveManyGenericTypesClosed.cs
  class HaveManyGenericTypesClosed (line 3) | public class HaveManyGenericTypesClosed : IHaveManyGenericTypesClosed
    method HaveManyGenericTypesClosed (line 5) | public HaveManyGenericTypesClosed()
    method HaveManyGenericTypesClosed (line 8) | public HaveManyGenericTypesClosed(GenericA t1Value)
    method HaveManyGenericTypesClosed (line 13) | public HaveManyGenericTypesClosed(GenericB t2Value)
    method HaveManyGenericTypesClosed (line 18) | public HaveManyGenericTypesClosed(GenericB t2Value, GenericA t1Value)
    method Set (line 56) | public void Set(GenericA t1Value)
    method Set (line 61) | public void Set(GenericB t2Value)
    method Set (line 66) | public void Set(GenericC t3Value)
    method Set (line 71) | public void Set(GenericD t4Value)
    method SetMultiple (line 76) | public void SetMultiple(GenericD t4Value, GenericC t3Value)

FILE: tests/Unity.Tests/Generics/IFoo.cs
  type IFoo (line 3) | public interface IFoo<TEntity>
  type IFoo (line 8) | public interface IFoo

FILE: tests/Unity.Tests/Generics/IGenLogger.cs
  type IGenLogger (line 3) | public interface IGenLogger

FILE: tests/Unity.Tests/Generics/IHaveAGenericType.cs
  type IHaveAGenericType (line 3) | public interface IHaveAGenericType<T1>
    method Set (line 7) | void Set(T1 value);

FILE: tests/Unity.Tests/Generics/IHaveManyGenericTypes.cs
  type IHaveManyGenericTypes (line 3) | public interface IHaveManyGenericTypes<T1, T2, T3, T4>
    method Set (line 10) | void Set(T1 value);
    method Set (line 11) | void Set(T2 value);
    method Set (line 12) | void Set(T3 value);
    method Set (line 13) | void Set(T4 value);
    method SetMultiple (line 15) | void SetMultiple(T4 t4Value, T3 t3Value);

FILE: tests/Unity.Tests/Generics/IHaveManyGenericTypesClosed.cs
  type IHaveManyGenericTypesClosed (line 3) | public interface IHaveManyGenericTypesClosed
    method Set (line 10) | void Set(GenericA value);
    method Set (line 11) | void Set(GenericB value);
    method Set (line 12) | void Set(GenericC value);
    method Set (line 13) | void Set(GenericD value);
    method SetMultiple (line 15) | void SetMultiple(GenericD t4Value, GenericC t3Value);

FILE: tests/Unity.Tests/Generics/IRepository.cs
  type IRepository (line 3) | public interface IRepository<TEntity> { }

FILE: tests/Unity.Tests/Generics/MockRespository.cs
  class MockRespository (line 3) | public class MockRespository<TEntity> : IRepository<TEntity>
    method MockRespository (line 14) | [InjectionConstructor]

FILE: tests/Unity.Tests/Generics/Refer.cs
  class Refer (line 3) | public class Refer<TEntity>
    method Refer (line 13) | public Refer()

FILE: tests/Unity.Tests/Generics/Refer1.cs
  class Refer1 (line 3) | public class Refer1
    method Refer1 (line 5) | public Refer1()

FILE: tests/Unity.Tests/Injection/InjectedMembersFixture.cs
  class InjectedMembersFixture (line 7) | [TestClass]
    method CanConfigureContainerToCallDefaultConstructor (line 10) | [TestMethod]
    method CanConfigureContainerToCallConstructorWithValues (line 20) | [TestMethod]
    method CanConfigureContainerToInjectProperty (line 38) | [TestMethod]
    method CanConfigureContainerToInjectPropertyWithValue (line 54) | [TestMethod]
    method CanConfigureInjectionByNameWithoutUsingGenerics (line 70) | [TestMethod]
    method CanConfigureInjectionWithGenericProperty (line 95) | [TestMethod]
    method CanConfigureContainerToDoMethodInjection (line 108) | [TestMethod]
    method ConfiguringInjectionAfterResolvingTakesEffect (line 124) | [TestMethod]
    method ConfiguringInjectionConstructorThatDoesNotExistThrows (line 140) | [TestMethod]
    method RegisterTypeThrowsIfTypeIsNull (line 150) | [TestMethod]
    class GuineaPig (line 159) | public class GuineaPig
      method GuineaPig (line 170) | public GuineaPig()
      method GuineaPig (line 175) | public GuineaPig(object o)
      method GuineaPig (line 181) | public GuineaPig(int i, string s, double d)
      method InjectMeHerePlease (line 201) | public void InjectMeHerePlease(string s)
    class GenericGuineaPig (line 207) | public class GenericGuineaPig<T>

FILE: tests/Unity.Tests/Injection/InjectingArraysFixture.cs
  class InjectingArraysFixture (line 8) | [TestClass]
    method CanConfigureContainerToCallConstructorWithArrayParameter (line 11) | [TestMethod]
    method CanConfigureContainerToCallConstructorWithArrayParameterWithNonGenericVersion (line 32) | [TestMethod]
    method CanConfigureContainerToInjectSpecificValuesIntoAnArray (line 51) | [TestMethod]
    method CanConfigureContainerToInjectSpecificValuesIntoAnArrayWithNonGenericVersion (line 74) | [TestMethod]
    method CreatingResolvedArrayParameterWithValuesOfNonCompatibleType (line 98) | [TestMethod]
    method ContainerAutomaticallyResolvesAllWhenInjectingArrays (line 112) | [TestMethod]
    method ContainerAutomaticallyResolvesAllWhenInjectingGenericArrays (line 125) | [TestMethod]
    class TypeWithArrayConstructorParameter (line 139) | public class TypeWithArrayConstructorParameter
      method TypeWithArrayConstructorParameter (line 143) | public TypeWithArrayConstructorParameter(ILogger[] loggers)
    class GenericTypeWithArrayProperty (line 149) | public class GenericTypeWithArrayProperty<T>

FILE: tests/Unity.Tests/Injection/OptionalDependencyAPIConfigurationFixture.cs
  class OptionalDependencyAPIConfigurationFixture (line 9) | [TestClass]
    method Setup (line 14) | [TestInitialize]
    method CanConfigureConstructorWithOptionalDependency (line 20) | [TestMethod]
    method CanResolveOptionalDependencyWhenConfiguredByAPI (line 31) | [TestMethod]
    method CanResolveOptionalDependenciesByNameWithAPI (line 45) | [TestMethod]
    method CanConfigureOptionalPropertiesViaAPI (line 59) | [TestMethod]
    method CanConfigureOptionalParameterToInjectionMethod (line 71) | [TestMethod]
    class GuineaPig (line 86) | public class GuineaPig
      method GuineaPig (line 90) | public GuineaPig()
      method GuineaPig (line 94) | public GuineaPig(IGuineaPig pig)
      method SetPig (line 106) | public void SetPig(IGuineaPig pig)
    type IGuineaPig (line 112) | public interface IGuineaPig
    class GuineaPigImpl (line 116) | public class GuineaPigImpl : IGuineaPig

FILE: tests/Unity.Tests/Injection/OptionalDependencyAttributeFixture.cs
  class OptionalDependencyAttributeFixture (line 8) | [TestClass]
    method OptionalDependencyParametersAreInjectedWithNull (line 11) | public void OptionalDependencyParametersAreInjectedWithNull()
    method OptionalDependencyParameterIsResolvedIfRegisteredInContainer (line 19) | [TestMethod]
    method OptionalDependencyParameterIsResolvedByName (line 31) | [TestMethod]
    method OptionalPropertiesGetNullWhenNotConfigured (line 46) | [TestMethod]
    method OptionalPropertiesAreInjectedWhenRegisteredInContainer (line 56) | [TestMethod]
    method OptionalPropertiesAreInjectedByName (line 68) | [TestMethod]
    class SomeInterfaceMock (line 83) | public class SomeInterfaceMock : ISomeInterface
    type ISomeInterface (line 86) | public interface ISomeInterface
    class ObjectWithOptionalConstructorParameter (line 90) | public class ObjectWithOptionalConstructorParameter
      method ObjectWithOptionalConstructorParameter (line 96) | public ObjectWithOptionalConstructorParameter([OptionalDependency] I...
    class ObjectWithNamedOptionalConstructorParameter (line 102) | public class ObjectWithNamedOptionalConstructorParameter
      method ObjectWithNamedOptionalConstructorParameter (line 105) | public ObjectWithNamedOptionalConstructorParameter([OptionalDependen...
    class ObjectWithOptionalProperty (line 111) | public class ObjectWithOptionalProperty
    class ObjectWithNamedOptionalProperty (line 121) | public class ObjectWithNamedOptionalProperty

FILE: tests/Unity.Tests/Injection/OptionalDependencyFixture.cs
  class OptionalDependencyFixture (line 10) | [TestClass]
    class ObjectWithProperty (line 14) | public class ObjectWithProperty
    method ByType (line 20) | [TestMethod]
    method OptionalParametersSetToNullIfNotRegistered (line 41) | [TestMethod]
    method OptionalParametersResolvedIfInstanceRegistered (line 51) | [TestMethod]
    method OptionalParametersResolvedIfInstanceRegisteredWithName (line 64) | [TestMethod]
    method OptionalParametersResolvedIfInstanceRegisteredInParent (line 77) | [TestMethod]
    method OptionalParametersResolvedIfInstanceRegisteredInParentWithName (line 91) | [TestMethod]
    method OptionalParametersNotResolvedIfMoreSpecificTypeRegistered (line 105) | [TestMethod]
    method OptionalParametersNotResolvedIfMoreSpecificTypeRegisteredWithName (line 118) | [TestMethod]
    method OptionalParametersResolvedIfTypeRegistered (line 131) | [TestMethod]
    method OptionalParametersResolvedIfTypeRegisteredInParent (line 143) | [TestMethod]
    method OptionalParametersNullIfTypeRegisteredThrowsAtResolve (line 156) | [TestMethod]
    method CanConfigureInjectionConstWithOptionalParameters (line 168) | [TestMethod]
    method CanConfigureInjectionPropertyWithOptionalParameters (line 183) | [TestMethod]
  class OptionalConstParameterClass (line 199) | public class OptionalConstParameterClass
    method OptionalConstParameterClass (line 202) | public OptionalConstParameterClass([OptionalDependency()] ITestObject ...
  class OptionalConstParameterClass1 (line 208) | public class OptionalConstParameterClass1
    method OptionalConstParameterClass1 (line 211) | public OptionalConstParameterClass1([OptionalDependency()] TestObject ...
  class NamedOptionalConstParameterClass (line 217) | public class NamedOptionalConstParameterClass
    method NamedOptionalConstParameterClass (line 220) | public NamedOptionalConstParameterClass([OptionalDependency("test")] I...
  class OptionalConstParameterThrowsAtResolve (line 226) | public class OptionalConstParameterThrowsAtResolve
    method OptionalConstParameterThrowsAtResolve (line 229) | public OptionalConstParameterThrowsAtResolve([OptionalDependency()] Ra...
  class OptionalDependencyTestClass (line 235) | public class OptionalDependencyTestClass
    method OptionalDependencyTestClass (line 239) | public OptionalDependencyTestClass()
    method OptionalDependencyTestClass (line 249) | public OptionalDependencyTestClass(ITestObject obj)
  type ITestObject (line 255) | public interface ITestObject { }
  class TestObject (line 257) | public class TestObject : ITestObject
  class RandomTestObject (line 261) | public class RandomTestObject
    method RandomTestObject (line 263) | public RandomTestObject()

FILE: tests/Unity.Tests/Injection/OptionalGenericParameterFixture.cs
  class OptionalGenericParameterFixture (line 12) | [TestClass]
    method CanCallConstructorTakingGenericParameterWithResolvableOptional (line 15) | [TestMethod]
    method CanCallConstructorTakingGenericParameterWithNonResolvableOptional (line 30) | [TestMethod]
    method CanConfiguredNamedResolutionOfOptionalGenericParameter (line 42) | [TestMethod]
    class ClassWithOneGenericParameter (line 59) | public class ClassWithOneGenericParameter<T>
      method ClassWithOneGenericParameter (line 63) | public ClassWithOneGenericParameter(string s, object o)
      method ClassWithOneGenericParameter (line 67) | public ClassWithOneGenericParameter(T injectedValue)

FILE: tests/Unity.Tests/Issues/CodeGenBugFixture.cs
  class CodeGenBugFixture (line 10) | [TestClass]
    method ResolvedTypeHasStaticConstructorCalled (line 13) | [TestMethod]
  class CodeGenBug (line 22) | public class CodeGenBug
    method CodeGenBug (line 26) | static CodeGenBug()
    method CodeGenBug (line 31) | [InjectionConstructor]
    method CodeGenBug (line 37) | public CodeGenBug(int i, object parameter)

FILE: tests/Unity.Tests/Issues/CodeplexIssuesFixture.cs
  class CodeplexIssuesFixture (line 10) | [TestClass]
    method InjectionConstructorWorksIfItIsFirstConstructor (line 14) | [TestMethod]
    method CanUseNonDefaultLifetimeManagerWithOpenGenericRegistration (line 23) | [TestMethod]
    method CanOverrideGenericLifetimeManagerWithSpecificOne (line 38) | [TestMethod]
    method RegisteringInstanceInChildOverridesRegisterTypeInParent (line 58) | [TestMethod]
    method CanConfigureGenericDictionaryForInjectionUsingRegisterType (line 73) | [TestMethod]
    method CanResolveTimespan (line 84) | [TestMethod]
    method IsRegisteredReturnsCorrectValue (line 96) | [TestMethod]
    method ResolveAllResolvesOpenGeneric (line 106) | [TestMethod]
    method ContainerControlledOpenGenericInParentResolvesProperlyInChild (line 123) | [TestMethod]
    type IBasicInterface (line 135) | public interface IBasicInterface
    class ClassWithDoubleConstructor (line 139) | public class ClassWithDoubleConstructor : IBasicInterface
      method ClassWithDoubleConstructor (line 143) | [InjectionConstructor]
      method ClassWithDoubleConstructor (line 149) | public ClassWithDoubleConstructor(string myString)
    type ISomeInterface (line 155) | public interface ISomeInterface<T>
    class MyTypeImplementingSomeInterface (line 159) | public class MyTypeImplementingSomeInterface<T> : ISomeInterface<T>
    class MyTypeImplementingSomeInterfaceOfString (line 163) | public class MyTypeImplementingSomeInterfaceOfString : ISomeInterface<...
    class MockBasic (line 167) | public class MockBasic : IBasicInterface
    class InnerX64Class (line 171) | public class InnerX64Class
    class OuterX64Class (line 175) | public class OuterX64Class
    class MyClass (line 180) | public class MyClass
      method MyClass (line 184) | public MyClass()
      method MyClass (line 187) | public MyClass(string name)

FILE: tests/Unity.Tests/Issues/GitHub.cs
  class GitHubIssues (line 10) | [TestClass]
    type IFoo (line 13) | public interface IFoo
    class Foo (line 18) | public class Foo : IFoo
      method Foo (line 22) | public Foo(string view)
    method unitycontainer_container_88 (line 86) | [TestMethod]
    method unitycontainer_container_92 (line 108) | [TestMethod]
    method unitycontainer_unity_204_1 (line 120) | [TestMethod]
    method unitycontainer_unity_204_2 (line 142) | [TestMethod]
    class ContextFactory (line 163) | public class ContextFactory
    class Repository1 (line 168) | public class Repository1
      method Repository1 (line 170) | public Repository1(ContextFactory factory)
    class Repository2 (line 178) | public class Repository2
      method Repository2 (line 180) | public Repository2(ContextFactory factory)
    class Service1 (line 188) | public class Service1
      method Service1 (line 190) | public Service1(Repository1 repository1, Repository2 repository2)
    class Service2 (line 200) | public class Service2
      method Service2 (line 202) | public Service2(Service1 service)
    method unitycontainer_container_82 (line 211) | [TestMethod]
    class BaselineTestType (line 226) | public class BaselineTestType<TDependency>
    method unitycontainer_container_293 (line 234) | [TestMethod]
  class MainClass (line 259) | public class MainClass : IHostClass
    method MainClass (line 261) | public MainClass()
    method DoSomething (line 269) | public void DoSomething()
  type IHostClass (line 274) | public interface IHostClass
    method DoSomething (line 276) | void DoSomething();
  class HelperClass (line 279) | public class HelperClass

FILE: tests/Unity.Tests/Lifetime/A.cs
  class A (line 3) | public class A

FILE: tests/Unity.Tests/Lifetime/AA.cs
  class AA (line 4) | public class AA : I1, I2

FILE: tests/Unity.Tests/Lifetime/ATTest.cs
  class ATTest (line 4) | public class ATTest : ITTest

FILE: tests/Unity.Tests/Lifetime/B.cs
  class B (line 3) | public class B

FILE: tests/Unity.Tests/Lifetime/BB.cs
  class BB (line 4) | public class BB : I1, I2

FILE: tests/Unity.Tests/Lifetime/HierarchicalLifetimeFixture.cs
  class WhenUsingHierarchicalLifetimeWithChildContainers (line 7) | [TestClass]
    method Setup (line 14) | [TestInitialize]
    method ThenResolvingInParentActsLikeContainerControlledLifetime (line 23) | [TestMethod]
    method ThenParentAndChildResolveDifferentInstances (line 31) | [TestMethod]
    method ThenChildResolvesTheSameInstance (line 39) | [TestMethod]
    method ThenSiblingContainersResolveDifferentInstances (line 47) | [TestMethod]
    method ThenDisposingOfChildContainerDisposesOnlyChildObject (line 55) | [TestMethod]
    class TestClass (line 66) | public class TestClass : IDisposable
      method Dispose (line 70) | public void Dispose()

FILE: tests/Unity.Tests/Lifetime/I1.cs
  type I1 (line 3) | public interface I1

FILE: tests/Unity.Tests/Lifetime/I2.cs
  type I2 (line 3) | public interface I2

FILE: tests/Unity.Tests/Lifetime/ITTest.cs
  type ITTest (line 3) | public interface ITTest

FILE: tests/Unity.Tests/Lifetime/LifetimeFixture.cs
  class LifetimeFixture (line 12) | [TestClass]
    method CheckSetSingletonDoneTwice (line 18) | [TestMethod]
    method CheckSingletonWithDependencies (line 31) | [TestMethod]
    method CheckSingletonAsDependencies (line 48) | [TestMethod]
    method CheckRegisterInstanceDoneTwice (line 69) | [TestMethod]
    method SetLifetimeTwiceWithLifetimeHandle (line 87) | [TestMethod]
    method SetSingletonRegisterInstanceTwice (line 103) | [TestMethod]
    method SetLifetimeGetTwice (line 119) | [TestMethod]
    method SetSingletonRegisterInstanceTwiceSetLifetimeTwice (line 135) | [TestMethod]
    method SetSingletonNoNameRegisterInstanceDiffNames (line 158) | [TestMethod]
    method SetLifetimeNoNameRegisterInstanceDiffNames (line 181) | [TestMethod]
    method SetSingletonWithNameRegisterInstanceDiffNames (line 205) | [TestMethod]
    method SetLifetimeWithNameRegisterInstanceDiffNames (line 230) | [TestMethod]
    method SetSingletonClassARegisterInstanceOfAandBWithSameName (line 256) | [TestMethod]
    method SetSingletonByNameRegisterInstanceOnit (line 283) | [TestMethod]
    method TestSetLifetime (line 304) | [TestMethod]
    method SetSingletonDefaultNameRegisterInstance (line 322) | [TestMethod]
    method RegisterWithParentAndChild (line 347) | [TestMethod]
    method UseContainerControlledLifetime (line 370) | [TestMethod]
    method TestResolveWithName (line 395) | [TestMethod]

FILE: tests/Unity.Tests/Lifetime/PerResolveLifetimeFixture.cs
  class PerResolveLifetimeFixture (line 9) | [TestClass]
    method ContainerCanBeConfiguredForPerBuildSingleton (line 12) | [TestMethod]
    method ViewIsReusedAcrossGraph (line 20) | [TestMethod]
    method ViewsAreDifferentInDifferentResolveCalls (line 33) | [TestMethod]
    method PerBuildLifetimeIsHonoredWhenUsingFactory (line 46) | [TestMethod]
    type IPresenter (line 59) | public interface IPresenter { }
    class MockPresenter (line 60) | public class MockPresenter : IPresenter
      method MockPresenter (line 64) | public MockPresenter(IView view)
    type IView (line 70) | public interface IView
    class View (line 75) | public class View : IView
    class SomeService (line 81) | public class SomeService { }
    class SomeOtherService (line 83) | public class SomeOtherService
      method SomeOtherService (line 86) | public SomeOtherService(SomeService someService)
    class AService (line 92) | public class AService
      method AService (line 94) | public AService(SomeOtherService otherService)

FILE: tests/Unity.Tests/Lifetime/UnityTestClass.cs
  class UnityTestClass (line 3) | public class UnityTestClass

FILE: tests/Unity.Tests/ObjectBuilder/BuildPlanAndChildContainerFixture.cs
  class BuildPlanAndChildContainerFixture (line 12) | [TestClass]
    method Setup (line 21) | [TestInitialize]
    class TestObject (line 32) | public class TestObject
      method TestObject (line 36) | public TestObject(int value)
    method ValuesInjectedAreCorrectWhenResolvingFromParentFirst (line 42) | [TestMethod]
    method ChildContainersForUnconfiguredTypesPutConstructorParamResolversInParent (line 54) | [TestMethod]
    method ChildContainersForUnconfiguredTypesPutPropertyResolversInParent (line 63) | [TestMethod]

FILE: tests/Unity.Tests/ObjectBuilder/LifetimeContainerTest.cs
  class LifetimeContainerTest (line 8) | [TestClass]
    method Setup (line 11) | [TestInitialize]
    method CanDetermineIfLifetimeContainerContainsObject (line 17) | [TestMethod]
    method CanEnumerateItemsInContainer (line 28) | [TestMethod]
    method ContainerEnsuresObjectsWontBeCollected (line 53) | [TestMethod]
    method DisposingContainerDisposesOwnedObjects (line 70) | [TestMethod]
    method DisposingItemsFromContainerDisposesInReverseOrderAdded (line 82) | [TestMethod]
    method RemovingItemsFromContainerDoesNotDisposeThem (line 101) | [TestMethod]
    method RemovingNonContainedItemDoesNotThrow (line 114) | [TestMethod]
    method ShouldDisposeAsManyAsPossibleWhenTaskExeptionIsThrown (line 122) | [TestMethod]
    method ShouldDisposeAsManyAsPossibleWhenSingleExeptionIsThrown (line 148) | [TestMethod]
    method ShouldDisposeAsManyAsPossibleWhenExeptionsAreThrown (line 176) | [TestMethod]
    class DisposableObject (line 208) | private class DisposableObject : IDisposable
      method Dispose (line 212) | public virtual void Dispose()
    class DisposeOrderCounter (line 218) | private class DisposeOrderCounter : IDisposable
      method ResetCount (line 223) | public static void ResetCount()
      method Dispose (line 228) | public void Dispose()
    class DisposableObjectThatThrowsOnDispose (line 234) | private class DisposableObjectThatThrowsOnDispose : DisposableObject
      method Dispose (line 236) | public override void Dispose()

FILE: tests/Unity.Tests/ObjectBuilder/StagedStrategyChainTest.cs
  class StagedStrategyChainTest (line 9) | [TestClass]
    method AssertOrder (line 12) | private static void AssertOrder(IEnumerable<BuilderStrategy> chain,
    method InnerStrategiesComeBeforeOuterStrategiesInStrategyChain (line 19) | [TestMethod]
    method OrderingAcrossStagesForStrategyChain (line 34) | [TestMethod]
    method MultipleChildContainers (line 53) | [TestMethod]
    type FakeStage (line 72) | private enum FakeStage
    class FakeStrategy (line 78) | private class FakeStrategy : BuilderStrategy

FILE: tests/Unity.Tests/ObjectBuilder/Utility/ActivatorCreationStrategy.cs
  class ActivatorCreationStrategy (line 7) | internal class ActivatorCreationStrategy : BuilderStrategy
    method PreBuildUp (line 15) | public override void PreBuildUp(ref BuilderContext context)

FILE: tests/Unity.Tests/ObjectBuilder/Utility/AssertActualExpectedException.cs
  class AssertActualExpectedException (line 8) | internal class AssertActualExpectedException : AssertFailedException
    method AssertActualExpectedException (line 14) | public AssertActualExpectedException(object actual,
    method AssertActualExpectedException (line 19) | public AssertActualExpectedException(object actual,
    method ConvertToString (line 83) | private static string ConvertToString(object value)
    method FormatMultiLine (line 99) | private static string FormatMultiLine(string value)

FILE: tests/Unity.Tests/ObjectBuilder/Utility/AssertHelper.cs
  class AssertHelper (line 8) | internal class AssertHelper
    method Contains (line 10) | public static void Contains<T>(T expected,
    method Contains (line 16) | public static void Contains<T>(T expected,
    method Contains (line 23) | public static void Contains<T>(T expected,
    method Contains (line 30) | public static void Contains<T>(T expected,
    method Contains (line 45) | public static void Contains(string expectedSubString,
    method Contains (line 52) | public static void Contains(string expectedSubString,
    method Contains (line 59) | public static void Contains(string expectedSubString,
    method GetComparer (line 70) | public static IComparer<T> GetComparer<T>()
    method IsType (line 75) | public static T IsType<T>(object @object)
    method IsType (line 81) | public static void IsType(Type expectedType,
    method IsType (line 87) | public static T IsType<T>(object @object,
    method IsType (line 94) | public static void IsType(Type expectedType,
    method NotEmpty (line 104) | public static void NotEmpty(IEnumerable collection)
    method NotEmpty (line 109) | public static void NotEmpty(IEnumerable collection,
    class AssertComparer (line 126) | private class AssertComparer<T> : IComparer<T>
      method Compare (line 128) | public int Compare(T x,

FILE: tests/Unity.Tests/Override/IForToUndergoeInject.cs
  type IForToUndergoeInject (line 4) | public interface IForToUndergoeInject

FILE: tests/Unity.Tests/Override/IForTypeToInject.cs
  type IForTypeToInject (line 3) | public interface IForTypeToInject

FILE: tests/Unity.Tests/Override/IInterfaceForTypesToInject.cs
  type IInterfaceForTypesToInject (line 3) | public interface IInterfaceForTypesToInject

FILE: tests/Unity.Tests/Override/IInterfaceForTypesToInjectForPropertyOverride.cs
  type IInterfaceForTypesToInjectForPropertyOverride (line 3) | public interface IInterfaceForTypesToInjectForPropertyOverride

FILE: tests/Unity.Tests/Override/ISubjectTypeToInject.cs
  type ISubjectTypeToInject (line 3) | public interface ISubjectTypeToInject

FILE: tests/Unity.Tests/Override/ISubjectTypeToInjectForPropertyOverride.cs
  type ISubjectTypeToInjectForPropertyOverride (line 3) | public interface ISubjectTypeToInjectForPropertyOverride

FILE: tests/Unity.Tests/Override/MultiThreadedPropertyOverrideFixture.cs
  class MultiThreadedPropertyOverrideTests (line 10) | [TestClass]
    method CanOverrideWithPerThreadLifetimeManagerWithDifferentOverridesInDifferenThreads (line 19) | [TestMethod]
    method ResolveWithDefault (line 72) | private static void ResolveWithDefault()
    method ResolveWithOverride1 (line 82) | private static void ResolveWithOverride1()
    method ResolveWithOverride2 (line 93) | private static void ResolveWithOverride2()

FILE: tests/Unity.Tests/Override/MySimpleType.cs
  class MySimpleType (line 3) | public class MySimpleType

FILE: tests/Unity.Tests/Override/MySimpleTypeForPropertyOverride.cs
  class MySimpleTypeForPropertyOverride (line 3) | public class MySimpleTypeForPropertyOverride

FILE: tests/Unity.Tests/Override/SubjectType1ToInject.cs
  class SubjectType1ToInject (line 3) | public class SubjectType1ToInject : ISubjectTypeToInject
    method SubjectType1ToInject (line 5) | [InjectionConstructor]
    method SubjectType1ToInject (line 11) | public SubjectType1ToInject(int x, string y)

FILE: tests/Unity.Tests/Override/SubjectType1ToInjectForPropertyOverride.cs
  class SubjectType1ToInjectForPropertyOverride (line 3) | public class SubjectType1ToInjectForPropertyOverride : ISubjectTypeToInj...

FILE: tests/Unity.Tests/Override/SubjectType2ToInject.cs
  class SubjectType2ToInject (line 3) | public class SubjectType2ToInject : ISubjectTypeToInject
    method SubjectType2ToInject (line 5) | [InjectionConstructor]
    method SubjectType2ToInject (line 11) | public SubjectType2ToInject(int x, string y)

FILE: tests/Unity.Tests/Override/SubjectType2ToInjectForPropertyOverride.cs
  class SubjectType2ToInjectForPropertyOverride (line 3) | public class SubjectType2ToInjectForPropertyOverride : ISubjectTypeToInj...

FILE: tests/Unity.Tests/Override/SubjectType3ToInject.cs
  class SubjectType3ToInject (line 3) | public class SubjectType3ToInject : ISubjectTypeToInject
    method SubjectType3ToInject (line 5) | public SubjectType3ToInject(int x, string y)

FILE: tests/Unity.Tests/Override/SubjectType3ToInjectForPropertyOverride.cs
  class SubjectType3ToInjectForPropertyOverride (line 3) | public class SubjectType3ToInjectForPropertyOverride : ISubjectTypeToInj...

FILE: tests/Unity.Tests/Override/TestTypeInConfig.cs
  class TestTypeInConfig (line 3) | public class TestTypeInConfig
    method TestTypeInConfig (line 5) | public TestTypeInConfig(int value)
    method TestTypeInConfig (line 10) | public TestTypeInConfig()

FILE: tests/Unity.Tests/Override/TypeBasedOverrideFixture.cs
  class TypeBasedOverrideFixture (line 15) | [TestClass]
    method OverrideComparison (line 18) | [TestMethod]
    method TypeBasedOverrideWithConstructorExactTypeMatch (line 29) | [TestMethod]
    method TypeBasedOverrideWithBuildUp (line 45) | [TestMethod]
    method TypeBasedOverrideInjectsDependentTypeProperty (line 60) | [TestMethod]
    method WhenResolvingAnOpenGenericType (line 81) | [TestMethod]
    method WhenTryingToResolveAPrimitiveType (line 96) | [TestMethod]
    method TypeBasedOverrideCollectionInCompositeOverrideInjectionTest (line 133) | [TestMethod]
    method TypeBasedOverrideNullCheckForResolverOverride (line 151) | [TestMethod]
    method TypeBasedOverrideInjectsDependentTypeConstructor (line 157) | [TestMethod]
    method TypeBasedOverrideWithResolveAll (line 171) | [TestMethod]
    method TypeBasedOverrideConstructorWithNoTypeMatch (line 190) | [TestMethod]

FILE: tests/Unity.Tests/Override/TypeToInject1.cs
  class TypeToInject1 (line 3) | public class TypeToInject1 : IInterfaceForTypesToInject
    method TypeToInject1 (line 5) | public TypeToInject1(int value)

FILE: tests/Unity.Tests/Override/TypeToInject1ForTypeOverride.cs
  class TypeToInject1ForTypeOverride (line 3) | public class TypeToInject1ForTypeOverride : IForTypeToInject
    method TypeToInject1ForTypeOverride (line 5) | public TypeToInject1ForTypeOverride(int value)

FILE: tests/Unity.Tests/Override/TypeToInject2.cs
  class TypeToInject2 (line 3) | public class TypeToInject2 : IInterfaceForTypesToInject
    method TypeToInject2 (line 5) | public TypeToInject2(int value)

FILE: tests/Unity.Tests/Override/TypeToInject2ForTypeOverride.cs
  class TypeToInject2ForTypeOverride (line 3) | public class TypeToInject2ForTypeOverride : IForTypeToInject
    method TypeToInject2ForTypeOverride (line 5) | public TypeToInject2ForTypeOverride(int value)

FILE: tests/Unity.Tests/Override/TypeToInject3.cs
  class TypeToInject3 (line 3) | public class TypeToInject3 : IInterfaceForTypesToInject
    method TypeToInject3 (line 5) | public TypeToInject3(int value)

FILE: tests/Unity.Tests/Override/TypeToInject3ForTypeOverride.cs
  class TypeToInject3ForTypeOverride (line 3) | public class TypeToInject3ForTypeOverride : IForTypeToInject
    method TypeToInject3ForTypeOverride (line 5) | public TypeToInject3ForTypeOverride(int value)

FILE: tests/Unity.Tests/Override/TypeToInjectForPropertyOverride1.cs
  class TypeToInjectForPropertyOverride1 (line 3) | public class TypeToInjectForPropertyOverride1 : IInterfaceForTypesToInje...
    method TypeToInjectForPropertyOverride1 (line 5) | public TypeToInjectForPropertyOverride1(int value)

FILE: tests/Unity.Tests/Override/TypeToInjectForPropertyOverride2.cs
  class TypeToInjectForPropertyOverride2 (line 3) | public class TypeToInjectForPropertyOverride2 : IInterfaceForTypesToInje...
    method TypeToInjectForPropertyOverride2 (line 5) | public TypeToInjectForPropertyOverride2(int value)

FILE: tests/Unity.Tests/Override/TypeToInjectForPropertyOverride3.cs
  class TypeToInjectForPropertyOverride3 (line 3) | public class TypeToInjectForPropertyOverride3 : IInterfaceForTypesToInje...
    method TypeToInjectForPropertyOverride3 (line 5) | public TypeToInjectForPropertyOverride3(int value)

FILE: tests/Unity.Tests/Override/TypeToToUndergoeTypeBasedInject2.cs
  class TypeToToUndergoeTypeBasedInject2 (line 3) | public class TypeToToUndergoeTypeBasedInject2 : IForToUndergoeInject
    method TypeToToUndergoeTypeBasedInject2 (line 5) | public TypeToToUndergoeTypeBasedInject2(TypeToInject2ForTypeOverride i...

FILE: tests/Unity.Tests/Override/TypeToToUndergoeTypeBasedInject3.cs
  class TypeToToUndergoeTypeBasedInject3 (line 3) | public class TypeToToUndergoeTypeBasedInject3 : IForToUndergoeInject

FILE: tests/Unity.Tests/Override/TypeToUndergoeTypeBasedInject1.cs
  class TypeToUndergoeTypeBasedInject1 (line 3) | public class TypeToUndergoeTypeBasedInject1 : IForToUndergoeInject
    method TypeToUndergoeTypeBasedInject1 (line 5) | public TypeToUndergoeTypeBasedInject1(IForTypeToInject injectedObject)

FILE: tests/Unity.Tests/Storage/RegistrationSetTests.cs
  class RegistrationSetTests (line 11) | [TestClass]
    method ShouldHandleCollisions (line 14) | [TestMethod]
    method MakeCollision (line 32) | private static Tuple<string, string> MakeCollision()

FILE: tests/Unity.Tests/TestDoubles/DependencyAttribute.cs
  class DependencyAttribute (line 5) | [AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter)]

FILE: tests/Unity.Tests/TestDoubles/InjectionConstructorAttribute.cs
  class InjectionConstructorAttribute (line 5) | [AttributeUsage(AttributeTargets.Constructor)]

FILE: tests/Unity.Tests/TestDoubles/InjectionMethodAttribute.cs
  class InjectionMethodAttribute (line 5) | [AttributeUsage(AttributeTargets.Method)]

FILE: tests/Unity.Tests/TestDoubles/MockContainerExtension.cs
  class MockContainerExtension (line 5) | internal class MockContainerExtension : UnityContainerExtension, IMockCo...
    method Initialize (line 19) | protected override void Initialize()
  type IMockConfiguration (line 25) | internal interface IMockConfiguration : IUnityContainerExtensionConfigur...

FILE: tests/Unity.Tests/TestDoubles/MockContainerExtensionWithNonDefaultConstructor.cs
  class ContainerExtensionWithNonDefaultConstructor (line 5) | public class ContainerExtensionWithNonDefaultConstructor : UnityContaine...
    method ContainerExtensionWithNonDefaultConstructor (line 7) | public ContainerExtensionWithNonDefaultConstructor(IUnityContainer con...
    method Initialize (line 11) | protected override void Initialize()

FILE: tests/Unity.Tests/TestDoubles/SpyExtension.cs
  class SpyExtension (line 12) | internal class SpyExtension : UnityContainerExtension
    method SpyExtension (line 19) | public SpyExtension(BuilderStrategy strategy, UnityBuildStage stage)
    method SpyExtension (line 25) | public SpyExtension(BuilderStrategy strategy, UnityBuildStage stage, o...
    method Initialize (line 33) | protected override void Initialize()

FILE: tests/Unity.Tests/TestDoubles/SpyPolicy.cs
  class SpyPolicy (line 9) | internal class SpyPolicy

FILE: tests/Unity.Tests/TestDoubles/SpyStrategy.cs
  class SpyStrategy (line 10) | internal class SpyStrategy : BuilderStrategy
    method PreBuildUp (line 15) | public override void PreBuildUp(ref BuilderContext context)
    method PostBuildUp (line 23) | public override void PostBuildUp(ref BuilderContext context)
    method UpdateSpyPolicy (line 38) | private void UpdateSpyPolicy(ref BuilderContext context)

FILE: tests/Unity.Tests/TestObjects/DisposableObject.cs
  class DisposableObject (line 7) | public class DisposableObject : IDisposable
    method Dispose (line 17) | public void Dispose()

FILE: tests/Unity.Tests/TestObjects/EmailService.cs
  class EmailService (line 6) | public class EmailService : IService, IDisposable
    method Dispose (line 11) | public void Dispose()
  class OtherEmailService (line 18) | public class OtherEmailService : IService, IOtherService, IDisposable
    method OtherEmailService (line 22) | [InjectionConstructor]
    method OtherEmailService (line 28) | public OtherEmailService(IUnityContainer container)
    method Dispose (line 34) | public void Dispose()

FILE: tests/Unity.Tests/TestObjects/FileLogger.cs
  class FileLogger (line 5) | public class FileLogger
    method FileLogger (line 9) | public FileLogger(string logFile)

FILE: tests/Unity.Tests/TestObjects/IBase.cs
  type IBase (line 5) | public interface IBase
  type ILazyDependency (line 10) | public interface ILazyDependency
  class Base (line 15) | public class Base : IBase
  class LazyDependency (line 21) | public class LazyDependency : ILazyDependency
  class LazyDependencyConstructor (line 27) | public class LazyDependencyConstructor
    method LazyDependencyConstructor (line 31) | public LazyDependencyConstructor(Lazy<EmailService> s)

FILE: tests/Unity.Tests/TestObjects/IService.cs
  type IService (line 6) | public interface IService
  type IOtherService (line 10) | public interface IOtherService

FILE: tests/Unity.Tests/TestObjects/NullLogger.cs
  class NullLogger (line 9) | public class NullLogger

FILE: tests/Unity.Tests/TestObjects/ObjectWithAmbiguousConstructors.cs
  class ObjectWithAmbiguousConstructors (line 5) | public class ObjectWithAmbiguousConstructors
    method ObjectWithAmbiguousConstructors (line 15) | public ObjectWithAmbiguousConstructors()
    method ObjectWithAmbiguousConstructors (line 20) | public ObjectWithAmbiguousConstructors(int first, string second, float...
    method ObjectWithAmbiguousConstructors (line 25) | public ObjectWithAmbiguousConstructors(Type first, Type second, Type t...
    method ObjectWithAmbiguousConstructors (line 30) | public ObjectWithAmbiguousConstructors(string first, string second, st...
    method ObjectWithAmbiguousConstructors (line 35) | public ObjectWithAmbiguousConstructors(string first, [Dependency(Five)...

FILE: tests/Unity.Tests/TestObjects/ObjectWithAmbiguousMarkedConstructor.cs
  class ObjectWithAmbiguousMarkedConstructor (line 6) | internal class ObjectWithAmbiguousMarkedConstructor
    method ObjectWithAmbiguousMarkedConstructor (line 8) | public ObjectWithAmbiguousMarkedConstructor()
    method ObjectWithAmbiguousMarkedConstructor (line 12) | public ObjectWithAmbiguousMarkedConstructor(int first, string second, ...
    method ObjectWithAmbiguousMarkedConstructor (line 16) | [InjectionConstructor]

FILE: tests/Unity.Tests/TestObjects/ObjectWithExplicitInterface.cs
  type ISomeCommonProperties (line 6) | public interface ISomeCommonProperties
  class ObjectWithExplicitInterface (line 15) | public class ObjectWithExplicitInterface : ISomeCommonProperties
    method ValidateInterface (line 43) | public void ValidateInterface()

FILE: tests/Unity.Tests/TestObjects/ObjectWithInjectionConstructor.cs
  class ObjectWithInjectionConstructor (line 5) | public class ObjectWithInjectionConstructor
    method ObjectWithInjectionConstructor (line 9) | public ObjectWithInjectionConstructor(object constructorDependency)
    method ObjectWithInjectionConstructor (line 14) | [InjectionConstructor]

FILE: tests/Unity.Tests/TestObjects/ObjectWithLotsOfDependencies.cs
  class ObjectWithLotsOfDependencies (line 8) | public class ObjectWithLotsOfDependencies
    method ObjectWithLotsOfDependencies (line 15) | public ObjectWithLotsOfDependencies(ILogger logger, ObjectWithOneDepen...
    method InjectMe (line 28) | [InjectionMethod]
    method Validate (line 34) | public void Validate()

FILE: tests/Unity.Tests/TestObjects/ObjectWithMarkedConstructor.cs
  class ObjectWithMarkedConstructor (line 6) | internal class ObjectWithMarkedConstructor
    method ObjectWithMarkedConstructor (line 8) | public ObjectWithMarkedConstructor(int notTheInjectionConstructor)
    method ObjectWithMarkedConstructor (line 12) | [InjectionConstructor]

FILE: tests/Unity.Tests/TestObjects/ObjectWithMultipleConstructors.cs
  class ObjectWithMultipleConstructors (line 5) | public class ObjectWithMultipleConstructors
    method ObjectWithMultipleConstructors (line 7) | public ObjectWithMultipleConstructors()
    method ObjectWithMultipleConstructors (line 11) | public ObjectWithMultipleConstructors(int first, string second)
    method ObjectWithMultipleConstructors (line 15) | public ObjectWithMultipleConstructors(int first)

FILE: tests/Unity.Tests/TestObjects/ObjectWithOneDependency.cs
  class ObjectWithOneDependency (line 7) | public class ObjectWithOneDependency
    method ObjectWithOneDependency (line 11) | public ObjectWithOneDependency(object inner)
    method Validate (line 21) | public void Validate()

FILE: tests/Unity.Tests/TestObjects/ObjectWithStaticAndInstanceProperties.cs
  class ObjectWithStaticAndInstanceProperties (line 6) | public class ObjectWithStaticAndInstanceProperties
    method Validate (line 14) | public void Validate()

FILE: tests/Unity.Tests/TestObjects/ObjectWithTwoConstructorDependencies.cs
  class ObjectWithTwoConstructorDependencies (line 10) | public class ObjectWithTwoConstructorDependencies
    method ObjectWithTwoConstructorDependencies (line 14) | public ObjectWithTwoConstructorDependencies(ObjectWithOneDependency on...
    method Validate (line 24) | public void Validate()

FILE: tests/Unity.Tests/TestObjects/OptionalLogger.cs
  class OptionalLogger (line 6) | internal class OptionalLogger
    method OptionalLogger (line 10) | public OptionalLogger([Dependency] string logFile)

FILE: tests/Unity.Tests/TestSupport/AssertExtensions.cs
  class AssertExtensions (line 7) | public static class AssertExtensions
    method AssertException (line 9) | public static void AssertException<TException>(Action action)
    method AssertException (line 15) | public static void AssertException<TException>(Action action, Action<T...
    method IsInstanceOfType (line 29) | public static void IsInstanceOfType(object value, Type expectedType)

FILE: tests/Unity.Tests/TestSupport/AssertHelper.cs
  class AssertHelper (line 11) | public static class AssertHelper
    method ThrowsException (line 13) | public static T ThrowsException<T>(Action action) where T : Exception
    method ThrowsException (line 18) | public static T ThrowsException<T>(Action action, string message) wher...
    method ThrowsException (line 23) | public static T ThrowsException<T>(Func<object> action) where T : Exce...
    method ThrowsException (line 28) | public static T ThrowsException<T>(Func<object> action, string message...
    method ThrowsException (line 33) | public static T ThrowsException<T>(Func<object> action, string message...
    method ThrowsException (line 41) | public static T ThrowsException<T>(Action action, string message, para...

FILE: tests/Unity.Tests/TestSupport/CollectionAssertExtensions.cs
  class CollectionAssertExtensions (line 8) | public static class CollectionAssertExtensions
    method AreEqual (line 10) | public static void AreEqual(ICollection expected, ICollection actual)
    method AreEqual (line 15) | public static void AreEqual(ICollection expected, ICollection actual, ...
    method AreEqual (line 20) | public static void AreEqual(ICollection expected, ICollection actual, ...
    method AreEqual (line 25) | public static void AreEqual(ICollection expected, ICollection actual, ...
    method AreEquivalent (line 34) | public static void AreEquivalent(ICollection expected, ICollection act...
    method AreCollectionsEqual (line 66) | private static bool AreCollectionsEqual(ICollection expected, ICollect...
    class DefaultComparer (line 95) | private class DefaultComparer : IComparer
      method Compare (line 97) | public int Compare(object x, object y)

FILE: tests/Unity.Tests/TestSupport/EnumerableAssertionExtensions.cs
  class EnumerableAssertionExtensions (line 8) | public static class EnumerableAssertionExtensions
    method AssertContainsExactly (line 10) | public static void AssertContainsExactly<TItem>(this IEnumerable<TItem...
    method AssertContainsInAnyOrder (line 15) | public static void AssertContainsInAnyOrder<TItem>(this IEnumerable<TI...
    method AssertTrueForAll (line 20) | public static void AssertTrueForAll<TItem>(this IEnumerable<TItem> ite...
    method AssertTrueForAny (line 25) | public static void AssertTrueForAny<TItem>(this IEnumerable<TItem> ite...
    method AssertFalseForAll (line 30) | public static void AssertFalseForAll<TItem>(this IEnumerable<TItem> it...
    method AssertFalseForAny (line 35) | public static void AssertFalseForAny<TItem>(this IEnumerable<TItem> it...
    method AssertHasItems (line 40) | public static void AssertHasItems<TItem>(this IEnumerable<TItem> items)
    method AssertHasNoItems (line 45) | public static void AssertHasNoItems<TItem>(this IEnumerable<TItem> items)

FILE: tests/Unity.Tests/TestSupport/EnumerableExtensions.cs
  class EnumerableExtensions (line 13) | public static class EnumerableExtensions
    method ForEach (line 21) | public static void ForEach<TItem>(this IEnumerable<TItem> sequence, Ac...
    method JoinStrings (line 42) | public static string JoinStrings<TItem>(this IEnumerable<TItem> sequen...
    method JoinStrings (line 67) | public static string JoinStrings<TItem>(this IEnumerable<TItem> sequen...

FILE: tests/Unity.Tests/TestSupport/ExtensibilityTestExtension.cs
  type IConfigOne (line 6) | public interface IConfigOne : IUnityContainerExtensionConfigurator
    method SetText (line 8) | IConfigOne SetText(string text);
  type IConfigTwo (line 11) | public interface IConfigTwo : IUnityContainerExtensionConfigurator
    method SetMessage (line 13) | IConfigTwo SetMessage(string text);
  class ExtensibilityTestExtension (line 16) | public class ExtensibilityTestExtension : UnityContainerExtension, IConf...
    method Initialize (line 21) | protected override void Initialize()
    method SetText (line 25) | public IConfigOne SetText(string text)
    method SetMessage (line 31) | public IConfigTwo SetMessage(string text)

FILE: tests/Unity.Tests/TestSupport/Guard.cs
  class Guard (line 10) | internal static partial class Guard
    method ArgumentNotNull (line 18) | public static void ArgumentNotNull(object argumentValue,
    method ArgumentNotNullOrEmpty (line 34) | public static void ArgumentNotNullOrEmpty(string argumentValue,
    method TypeIsAssignable (line 55) | public static void TypeIsAssignable(Type assignmentTargetType, Type as...
    method InstanceIsAssignable (line 86) | public static void InstanceIsAssignable(Type assignmentTargetType, obj...
    method GetTypeName (line 110) | private static string GetTypeName(object assignmentInstance)

FILE: tests/Unity.Tests/TestSupport/IAdditionalInterface.cs
  type IAdditionalInterface (line 3) | public interface IAdditionalInterface
    method DoNothing (line 5) | int DoNothing();

FILE: tests/Unity.Tests/TestSupport/ILogger.cs
  type ILogger (line 4) | public interface ILogger

FILE: tests/Unity.Tests/TestSupport/MockContainerExtension.cs
  class MockContainerExtension (line 6) | public class MockContainerExtension : UnityContainerExtension, IMockConf...
    method Initialize (line 20) | protected override void Initialize()
  type IMockConfiguration (line 26) | public interface IMockConfiguration : IUnityContainerExtensionConfigurator

FILE: tests/Unity.Tests/TestSupport/MockDatabase.cs
  class MockDatabase (line 4) | public class MockDatabase
    method MockDatabase (line 9) | public MockDatabase()
    method MockDatabase (line 14) | public MockDatabase(string connectionString)
    method Create (line 19) | public static MockDatabase Create(string connectionString)

FILE: tests/Unity.Tests/TestSupport/MockLogger.cs
  class MockLogger (line 5) | public class MockLogger : ILogger

FILE: tests/Unity.Tests/TestSupport/NegativeTypeConverter.cs
  class NegativeTypeConverter (line 11) | internal class NegativeTypeConverter : TypeConverter
    method CanConvertFrom (line 23) | public override bool CanConvertFrom(ITypeDescriptorContext context, Ty...
    method CanConvertTo (line 38) | public override bool CanConvertTo(ITypeDescriptorContext context, Type...
    method ConvertFrom (line 55) | public override object ConvertFrom(ITypeDescriptorContext context, Cul...
    method ConvertTo (line 79) | public override object ConvertTo(ITypeDescriptorContext context, Cultu...

FILE: tests/Unity.Tests/TestSupport/ObjectUsingLogger.cs
  class ObjectUsingLogger (line 3) | public class ObjectUsingLogger

FILE: tests/Unity.Tests/TestSupport/ObjectWithOneConstructorDependency.cs
  class ObjectWithOneConstructorDependency (line 3) | public class ObjectWithOneConstructorDependency
    method ObjectWithOneConstructorDependency (line 7) | public ObjectWithOneConstructorDependency(ILogger logger)

FILE: tests/Unity.Tests/TestSupport/ObjectWithTwoConstructorParameters.cs
  class ObjectWithTwoConstructorParameters (line 3) | public class ObjectWithTwoConstructorParameters
    method ObjectWithTwoConstructorParameters (line 8) | public ObjectWithTwoConstructorParameters(string connectionString, ILo...

FILE: tests/Unity.Tests/TestSupport/ObjectWithTwoProperties.cs
  class ObjectWithTwoProperties (line 5) | public class ObjectWithTwoProperties
    method Validate (line 24) | public void Validate()

FILE: tests/Unity.Tests/TestSupport/Pair.cs
  class Pair (line 8) | public class Pair<TFirst, TSecond>
    method Pair (line 19) | public Pair(TFirst first, TSecond second)
    method Make (line 55) | public static Pair<TFirstParameter, TSecondParameter> Make<TFirstParam...
  class Pair (line 45) | public static class Pair
    method Pair (line 19) | public Pair(TFirst first, TSecond second)
    method Make (line 55) | public static Pair<TFirstParameter, TSecondParameter> Make<TFirstParam...

FILE: tests/Unity.Tests/TestSupport/Sequence.cs
  class Sequence (line 9) | public static class Sequence
    method Collect (line 18) | public static T[] Collect<T>(params T[] arguments)
    method Zip (line 32) | public static IEnumerable<Pair<TFirstSequenceElement, TSecondSequenceE...

FILE: tests/Unity.Tests/TestSupport/SessionLifetimeManager.cs
  class SessionLifetimeManager (line 9) | [TypeConverter(typeof(SessionKeyTypeConverter))]
    method SessionLifetimeManager (line 15) | public SessionLifetimeManager(string sessionKey)
    method GetValue (line 25) | public override object GetValue(ILifetimeContainer container = null)
    method SetValue (line 31) | public override void SetValue(object newValue, ILifetimeContainer cont...
    method RemoveValue (line 35) | public override void RemoveValue(ILifetimeContainer container = null)
    method OnCreateLifetimeManager (line 39) | protected override LifetimeManager OnCreateLifetimeManager()
  class SessionKeyTypeConverter (line 45) | public class SessionKeyTypeConverter : TypeConverter
    method CanConvertFrom (line 47) | public override bool CanConvertFrom(ITypeDescriptorContext context, Ty...
    method CanConvertTo (line 52) | public override bool CanConvertTo(ITypeDescriptorContext context, Type...
    method ConvertFrom (line 57) | public override object ConvertFrom(
    method ConvertTo (line 63) | public override object ConvertTo(
  class ReversedSessionKeyTypeConverter (line 70) | public class ReversedSessionKeyTypeConverter : TypeConverter
    method CanConvertFrom (line 72) | public override bool CanConvertFrom(ITypeDescriptorContext context, Ty...
    method CanConvertTo (line 77) | public override bool CanConvertTo(ITypeDescriptorContext context, Type...
    method ConvertFrom (line 82) | public override object ConvertFrom(
    method ConvertTo (line 89) | public override object ConvertTo(ITypeDescriptorContext context, Cultu...
    method Reverse (line 95) | private static string Reverse(IEnumerable<char> s)

FILE: tests/Unity.Tests/TestSupport/SpecialLogger.cs
  class SpecialLogger (line 3) | public class SpecialLogger : ILogger

FILE: tests/Unity.Tests/TestSupport/TypeReflectionExtensions.cs
  class TypeReflectionExtensions (line 7) | public static class TypeReflectionExtensions
    method GetMatchingConstructor (line 9) | public static ConstructorInfo GetMatchingConstructor(this Type type, T...
Condensed preview — 312 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (844K chars).
[
  {
    "path": ".gitattributes",
    "chars": 497,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 49,
    "preview": "github: [ENikS]\nopen_collective: unity-container\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 599,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n---\nname: Bug report\nabout: Create a report to help"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 362,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n### Description\nBriefly explain the feature you "
  },
  {
    "path": ".github/workflows/regression.yml",
    "chars": 5380,
    "preview": "# https://dotnet.microsoft.com/download/dotnet-core\n# https://dotnet.microsoft.com/download/dotnet-framework\n\nname: Regr"
  },
  {
    "path": ".gitignore",
    "chars": 1946,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": "LICENSE",
    "chars": 11385,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 1898,
    "preview": "[![Build status](https://ci.appveyor.com/api/projects/status/s7s905q6xd6b2503/branch/master?svg=true)](https://ci.appvey"
  },
  {
    "path": "appveyor.yml",
    "chars": 873,
    "preview": "image: Visual Studio 2019\nconfiguration: Release\nplatform: Any CPU\n\ninstall:\n  - ps: $env:build_version = (Select-Xml -P"
  },
  {
    "path": "codecov.yml",
    "chars": 136,
    "preview": "#ignore:\n#- \"tests/*\"           # Ignore tests\n#- \"src/Utility/*\"     # Ignore utilities\n#- \"**/*.Designer.cs\"  # Ignore"
  },
  {
    "path": "package.props",
    "chars": 498,
    "preview": "<Project>\n\n  <PropertyGroup>\n    <VersionBase>5.11.11</VersionBase>\n    <PackageReleaseNotes>This package is compatible "
  },
  {
    "path": "package.sln",
    "chars": 1859,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27004.2002\nM"
  },
  {
    "path": "src/Builder/Context/BuilderContext.cs",
    "chars": 11693,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Sec"
  },
  {
    "path": "src/Builder/Context/BuilderContextExpression.cs",
    "chars": 2219,
    "preview": "using System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Unity.Resolution;\n\nnamespace Unity.Bui"
  },
  {
    "path": "src/Builder/Stages/BuilderStage.cs",
    "chars": 1664,
    "preview": "\n\nnamespace Unity.Builder\n{\n    /// <summary>\n    /// Enumeration to represent the object builder stages.\n    /// </sum"
  },
  {
    "path": "src/Builder/Stages/SelectionStage.cs",
    "chars": 136,
    "preview": "namespace Unity.Builder\n{\n    public enum SelectionStage\n    {\n        Injected = 0,\n\n        Custom = 1,\n\n        Defa"
  },
  {
    "path": "src/Builder/Stages/UnityBuildStage.cs",
    "chars": 1334,
    "preview": "\n\nnamespace Unity.Builder\n{\n    /// <summary>\n    /// The build stages we use in the Unity container\n    /// strategy p"
  },
  {
    "path": "src/Events/ChildContainerCreatedEventArgs.cs",
    "chars": 1052,
    "preview": "\n\nusing System;\nusing Unity.Extension;\n\nnamespace Unity.Events\n{\n    /// <summary>\n    /// Event argument class for the"
  },
  {
    "path": "src/Events/NamedEventArgs.cs",
    "chars": 916,
    "preview": "\n\nusing System;\n\nnamespace Unity.Events\n{\n    /// <summary>\n    /// An EventArgs class that holds a string Name.\n    //"
  },
  {
    "path": "src/Events/RegisterEventArgs.cs",
    "chars": 1326,
    "preview": "using System;\nusing Unity.Extension;\nusing Unity.Lifetime;\n\nnamespace Unity.Events\n{\n    /// <summary>\n    /// Event ar"
  },
  {
    "path": "src/Events/RegisterInstanceEventArgs.cs",
    "chars": 1941,
    "preview": "using System;\nusing Unity.Extension;\nusing Unity.Lifetime;\n\nnamespace Unity.Events\n{\n    /// <summary>\n    /// Event ar"
  },
  {
    "path": "src/Exceptions/DependencyMissingException.cs",
    "chars": 1748,
    "preview": "using System;\nusing System.Globalization;\n\nnamespace Unity.Exceptions\n{\n    /// <summary>\n    /// Represents that a dep"
  },
  {
    "path": "src/Exceptions/IllegalInjectionMethodException.Desktop.cs",
    "chars": 300,
    "preview": "using System;\n\nnamespace Unity.Exceptions\n{\n    /// <summary>\n    /// The exception thrown when injection is attempted o"
  },
  {
    "path": "src/Exceptions/IllegalInjectionMethodException.cs",
    "chars": 1273,
    "preview": "\n\nusing System;\n\nnamespace Unity.Exceptions\n{\n    /// <summary>\n    /// The exception thrown when injection is attempte"
  },
  {
    "path": "src/Exceptions/InvalidRegistrationException.cs",
    "chars": 348,
    "preview": "using System;\n\nnamespace Unity.Exceptions\n{\n    internal class InvalidRegistrationException : Exception\n    {\n        p"
  },
  {
    "path": "src/Exceptions/MakeGenericTypeFailedException.cs",
    "chars": 282,
    "preview": "using System;\n\nnamespace Unity.Exceptions\n{\n    internal class MakeGenericTypeFailedException : Exception\n    {\n       "
  },
  {
    "path": "src/Extension/ExtensionContext.cs",
    "chars": 3235,
    "preview": "using System;\nusing Unity.Builder;\nusing Unity.Events;\nusing Unity.Injection;\nusing Unity.Lifetime;\nusing Unity.Policy;"
  },
  {
    "path": "src/Extension/IUnityContainerExtensionConfigurator.cs",
    "chars": 375,
    "preview": "\n\n\nnamespace Unity.Extension\n{\n    /// <summary>\n    /// Base interface for all extension configuration interfaces.\n   "
  },
  {
    "path": "src/Extension/UnityContainerExtension.cs",
    "chars": 2567,
    "preview": "\n\nusing System;\n\nnamespace Unity.Extension\n{\n    /// <summary>\n    /// Base class for all <see cref=\"IUnityContainer\"/>"
  },
  {
    "path": "src/Extensions/DefaultLifetime.cs",
    "chars": 1367,
    "preview": "using System;\nusing Unity.Extension;\nusing Unity.Lifetime;\n\nnamespace Unity\n{\n    public class DefaultLifetime : UnityC"
  },
  {
    "path": "src/Extensions/Diagnostic.cs",
    "chars": 4919,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Reflection;\nusing Unity.Extensio"
  },
  {
    "path": "src/Extensions/ExtensionExtensions.cs",
    "chars": 3733,
    "preview": "using System;\nusing Unity.Extension;\n\nnamespace Unity\n{\n    /// <summary>\n    /// Extension class that adds a set of co"
  },
  {
    "path": "src/Extensions/Legacy.cs",
    "chars": 518,
    "preview": "using System.Linq;\nusing Unity.Builder;\nusing Unity.Processors;\nusing Unity.Storage;\n\nnamespace Unity.Extension\n{\n    p"
  },
  {
    "path": "src/Extensions/Strategies.cs",
    "chars": 1169,
    "preview": "using Unity.Extension;\nusing Unity.Policy;\n\nnamespace Unity\n{\n    /// <summary>\n    /// This extension forces the conta"
  },
  {
    "path": "src/Factories/DeferredFuncResolverFactory.cs",
    "chars": 1106,
    "preview": "using System;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Policy;\nusing Unity.Resolution;\n\nnamespace Unit"
  },
  {
    "path": "src/Factories/EnumerableResolver.cs",
    "chars": 3090,
    "preview": "using System;\nusing System.Linq;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Policy;\nusing Unity.Resoluti"
  },
  {
    "path": "src/Factories/GenericLazyResolverFactory.cs",
    "chars": 1772,
    "preview": "using System;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Lifetime;\nusing Unity.Resolution;\nusing Unity.S"
  },
  {
    "path": "src/Injection/Validating.cs",
    "chars": 8881,
    "preview": "using System;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Unity.Injection\n{\n    public static class Validati"
  },
  {
    "path": "src/Legacy/DynamicMethod/DynamicBuildPlanGenerationContext.cs",
    "chars": 1951,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Legacy/IBuildPlanCreatorPolicy.cs",
    "chars": 626,
    "preview": "using System;\nusing Unity.Builder;\n\nnamespace Unity.Policy\n{\n    [Obsolete(\"This interface has been replaced with Unity"
  },
  {
    "path": "src/Legacy/IBuildPlanPolicy.cs",
    "chars": 268,
    "preview": "using System;\nusing Unity.Builder;\n\nnamespace Unity.Policy\n{\n    [Obsolete(\"IBuildPlanPolicy has been deprecated, pleas"
  },
  {
    "path": "src/Legacy/IConstructorSelectorPolicy.cs",
    "chars": 271,
    "preview": "using System;\nusing System.Reflection;\n\nnamespace Unity.Policy\n{\n    [Obsolete(\"IConstructorSelectorPolicy has been dep"
  },
  {
    "path": "src/Legacy/IMethodSelectorPolicy.cs",
    "chars": 362,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing Unity.Builder;\n\nnamespace Unity.Policy\n{"
  },
  {
    "path": "src/Legacy/IPropertySelectorPolicy.cs",
    "chars": 390,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing Unity.Builder;\n\nnamespace Unity.Policy\n{"
  },
  {
    "path": "src/Legacy/InjectionParameterValue.cs",
    "chars": 309,
    "preview": "namespace Unity.Injection\n{\n    /// <summary>\n    /// Base type for objects that are used to configure parameters for\n "
  },
  {
    "path": "src/Legacy/NamedTypeBuildKey.cs",
    "chars": 6227,
    "preview": "using System;\nusing System.Globalization;\nusing Unity.Policy;\n\nnamespace Unity.Builder\n{\n    /// <summary>\n    /// Buil"
  },
  {
    "path": "src/Legacy/TypeBasedOverride.cs",
    "chars": 3078,
    "preview": "using System;\nusing System.Reflection;\nusing Unity.Policy;\n\nnamespace Unity.Resolution\n{\n    /// <summary>\n    /// An i"
  },
  {
    "path": "src/Legacy/TypedInjectionValue.cs",
    "chars": 306,
    "preview": "using System;\nusing System.Reflection;\n\nnamespace Unity.Injection\n{\n    /// <summary>\n    /// A base class for implemen"
  },
  {
    "path": "src/Lifetime/ContainerLifetimeManager.cs",
    "chars": 808,
    "preview": "namespace Unity.Lifetime\n{\n    /// <summary>\n    /// Internal container lifetime manager. \n    /// This manager disting"
  },
  {
    "path": "src/Lifetime/InternalPerResolveLifetimeManager.cs",
    "chars": 1109,
    "preview": "\n\nnamespace Unity.Lifetime\n{\n    /// <summary>\n    /// This is a custom lifetime manager that acts like <see cref=\"Tran"
  },
  {
    "path": "src/Lifetime/LifetimeContainer.cs",
    "chars": 5033,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Unity.Lifetime\n"
  },
  {
    "path": "src/Policy/Converter.cs",
    "chars": 173,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Unity.Policy\n{\n    public delegate TOutpu"
  },
  {
    "path": "src/Policy/IResolveDelegateFactory.cs",
    "chars": 317,
    "preview": "using Unity.Builder;\nusing Unity.Resolution;\n\nnamespace Unity.Policy\n{\n    public delegate ResolveDelegate<BuilderConte"
  },
  {
    "path": "src/Policy/ISelect.cs",
    "chars": 259,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace Unity.Policy\n{\n    public interface"
  },
  {
    "path": "src/Processors/Abstracts/MemberExpression.cs",
    "chars": 2133,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Unity.Inj"
  },
  {
    "path": "src/Processors/Abstracts/MemberProcessor.cs",
    "chars": 10906,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressi"
  },
  {
    "path": "src/Processors/Abstracts/MemberResolution.cs",
    "chars": 2154,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Injection;\nus"
  },
  {
    "path": "src/Processors/Constructor/ConstructorDiagnostic.cs",
    "chars": 15641,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Processors/Constructor/ConstructorExpression.cs",
    "chars": 4799,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Processors/Constructor/ConstructorProcessor.cs",
    "chars": 6807,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;"
  },
  {
    "path": "src/Processors/Constructor/ConstructorResolution.cs",
    "chars": 3884,
    "preview": "using System;\nusing System.Linq;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Exceptions;\nusing Unity.Inje"
  },
  {
    "path": "src/Processors/Fields/FieldDiagnostic.cs",
    "chars": 3978,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Unity.Bui"
  },
  {
    "path": "src/Processors/Fields/FieldProcessor.cs",
    "chars": 2025,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Processors/Methods/MethodDiagnostic.cs",
    "chars": 5450,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Processors/Methods/MethodProcessor.cs",
    "chars": 2216,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Processors/Parameters/ParametersDiagnostic.cs",
    "chars": 5583,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Unity.Bui"
  },
  {
    "path": "src/Processors/Parameters/ParametersProcessor.cs",
    "chars": 10448,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/Processors/Properties/PropertyDiagnostic.cs",
    "chars": 4493,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Unity.Bui"
  },
  {
    "path": "src/Processors/Properties/PropertyProcessor.cs",
    "chars": 2330,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Unity.Bui"
  },
  {
    "path": "src/Properties/AssemblyInfo.cs",
    "chars": 728,
    "preview": "using System;\nusing System.Runtime.CompilerServices;\nusing System.Security;\n\n[assembly: CLSCompliant(true)]\n[assembly: A"
  },
  {
    "path": "src/Registration/ContainerRegistration.cs",
    "chars": 1425,
    "preview": "using System;\nusing System.Diagnostics;\nusing Unity.Injection;\nusing Unity.Lifetime;\nusing Unity.Storage;\n\nnamespace Un"
  },
  {
    "path": "src/Registration/InternalRegistration.cs",
    "chars": 2970,
    "preview": "using System;\nusing System.Diagnostics;\nusing Unity.Injection;\nusing Unity.Policy;\nusing Unity.Storage;\nusing Unity.Stra"
  },
  {
    "path": "src/Storage/HashRegistry.cs",
    "chars": 6245,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Security;\nusing Unity.Policy;\nus"
  },
  {
    "path": "src/Storage/IRegistry.cs",
    "chars": 417,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace Unity.Storage\n{\n\n    public interface IRegistry<TKey, TValue"
  },
  {
    "path": "src/Storage/IStagedStrategyChain.cs",
    "chars": 1602,
    "preview": "using System;\n\nnamespace Unity.Storage\n{\n    /// <summary>\n    /// This interface defines a standard method to create m"
  },
  {
    "path": "src/Storage/LinkedNode.cs",
    "chars": 267,
    "preview": "using System.Diagnostics;\n\nnamespace Unity.Storage\n{\n    [DebuggerDisplay(\"Node:  Key={Key},  Value={Value}\")]\n    publi"
  },
  {
    "path": "src/Storage/LinkedRegistry.cs",
    "chars": 5022,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Unity.Policy;\n\nnamespace Unity.Storage\n"
  },
  {
    "path": "src/Storage/PolicyList.cs",
    "chars": 5240,
    "preview": "using System;\nusing System.Collections.Generic;\nusing Unity.Policy;\n\nnamespace Unity.Storage\n{\n    /// <summary>\n    //"
  },
  {
    "path": "src/Storage/QuickSet.cs",
    "chars": 3951,
    "preview": "using System;\nusing System.Security;\n\nnamespace Unity.Storage\n{\n    [SecuritySafeCritical]\n    public class QuickSet<TVa"
  },
  {
    "path": "src/Storage/RegistrationSet.cs",
    "chars": 5234,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\n"
  },
  {
    "path": "src/Storage/Registrations.cs",
    "chars": 6248,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Security;\nusing Unity.Policy;\nus"
  },
  {
    "path": "src/Storage/StagedStrategyChain.cs",
    "chars": 4645,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\n"
  },
  {
    "path": "src/Strategies/ArrayResolveStrategy.cs",
    "chars": 2861,
    "preview": "using System;\nusing System.Linq;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Injection;\nusing Unity.Policy"
  },
  {
    "path": "src/Strategies/BuildKeyMappingStrategy.cs",
    "chars": 3382,
    "preview": "using System;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Exceptions;\nusing Unity.Injection;\nusing Unity.R"
  },
  {
    "path": "src/Strategies/BuildPlanStrategy.cs",
    "chars": 6221,
    "preview": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.E"
  },
  {
    "path": "src/Strategies/BuilderStrategy.cs",
    "chars": 3273,
    "preview": "using System;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Injection;\nusing Unity.Registration;\n\nnamespace"
  },
  {
    "path": "src/Strategies/LifetimeStrategy.cs",
    "chars": 4390,
    "preview": "using System;\nusing System.Reflection;\nusing Unity.Builder;\nusing Unity.Injection;\nusing Unity.Lifetime;\nusing Unity.Re"
  },
  {
    "path": "src/Unity.Container.csproj",
    "chars": 3743,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\package.props\" />\n\n  <PropertyGroup>\n    <Version>$(VersionBas"
  },
  {
    "path": "src/Unity.Container.csproj.DotSettings",
    "chars": 2348,
    "preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
  },
  {
    "path": "src/UnityContainer.ContainerContext.cs",
    "chars": 3497,
    "preview": "using System;\nusing Unity.Builder;\nusing Unity.Events;\nusing Unity.Extension;\nusing Unity.Lifetime;\nusing Unity.Policy;"
  },
  {
    "path": "src/UnityContainer.Diagnostic.cs",
    "chars": 3697,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\n"
  },
  {
    "path": "src/UnityContainer.IUnityContainer.cs",
    "chars": 13914,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Unity.Builder;\nusing Unity."
  },
  {
    "path": "src/UnityContainer.Implementation.cs",
    "chars": 19771,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing "
  },
  {
    "path": "src/UnityContainer.Public.cs",
    "chars": 9403,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing Unity.Builder;\nusing "
  },
  {
    "path": "src/UnityContainer.Registration.cs",
    "chars": 28273,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing Unity.Policy;\nusing Unity.Reg"
  },
  {
    "path": "src/UnityContainer.Resolution.cs",
    "chars": 20547,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflectio"
  },
  {
    "path": "src/Utility/ContainerConstants.cs",
    "chars": 1219,
    "preview": "\nnamespace Unity\n{\n    internal static class Error\n    {\n        public const string MissingDependency = \"Could not res"
  },
  {
    "path": "src/Utility/HashHelpers.cs",
    "chars": 2663,
    "preview": "using System;\n\nnamespace Unity.Utility\n{\n    internal static class HashHelpers\n    {\n        // Table of prime numbers "
  },
  {
    "path": "tests/Performance/Abstracts/BasicBase.cs",
    "chars": 28513,
    "preview": "using BenchmarkDotNet.Attributes;\nusing Runner.Setup;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Unity;"
  },
  {
    "path": "tests/Performance/Abstracts/RegistrationBase.cs",
    "chars": 57121,
    "preview": "using BenchmarkDotNet.Attributes;\nusing Runner.Setup;\nusing System.Linq;\nusing Unity;\n\nnamespace Performance.Tests\n{\n  "
  },
  {
    "path": "tests/Performance/Configuration/BenchmarkConfiguration.cs",
    "chars": 451,
    "preview": "using BenchmarkDotNet.Configs;\nusing BenchmarkDotNet.Jobs;\nusing BenchmarkDotNet.Validators;\n\nnamespace Runner.Setup\n{\n "
  },
  {
    "path": "tests/Performance/Data/MultiType.cs",
    "chars": 6875,
    "preview": "using System;\nusing System.Linq;\nusing BenchmarkDotNet.Attributes;\nusing Runner.Setup;\nusing Unity;\n\nnamespace Runner.T"
  },
  {
    "path": "tests/Performance/Data/TestData.cs",
    "chars": 5354,
    "preview": "using Unity;\n\nnamespace Performance.Tests\n{\n    #region Plain Old CLR object\n\n    public class Poco00 { }\n    public cl"
  },
  {
    "path": "tests/Performance/Performance.csproj",
    "chars": 671,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net461</Targ"
  },
  {
    "path": "tests/Performance/Program.cs",
    "chars": 575,
    "preview": "using BenchmarkDotNet.Running;\nusing System.Reflection;\nusing Unity;\n\nnamespace Performance\n{\n    class Program\n    {\n "
  },
  {
    "path": "tests/Performance/Tests/Registration/Registration.cs",
    "chars": 1081,
    "preview": "using BenchmarkDotNet.Attributes;\n\nnamespace Performance.Tests\n{\n    public class Registration : RegistrationBase\n    {"
  },
  {
    "path": "tests/Performance/Tests/Resolution/Compiled.cs",
    "chars": 2265,
    "preview": "using BenchmarkDotNet.Attributes;\nusing Unity;\n\nnamespace Performance.Tests\n{\n    public class Compiled : BasicBase\n   "
  },
  {
    "path": "tests/Performance/Tests/Resolution/PreCompiled.cs",
    "chars": 2778,
    "preview": "using BenchmarkDotNet.Attributes;\nusing Unity;\n\nnamespace Performance.Tests\n{\n    public class PreCompiled : BasicBase\n"
  },
  {
    "path": "tests/Performance/Tests/Resolution/PreResolved.cs",
    "chars": 2732,
    "preview": "using BenchmarkDotNet.Attributes;\nusing Unity;\n\nnamespace Performance.Tests\n{\n    public class PreResolved : BasicBase\n"
  },
  {
    "path": "tests/Performance/Tests/Resolution/Resolved.cs",
    "chars": 2263,
    "preview": "using BenchmarkDotNet.Attributes;\nusing Unity;\n\nnamespace Performance.Tests\n{\n    public class Resolved : BasicBase\n   "
  },
  {
    "path": "tests/Unity.Diagnostic/BuildUp.cs",
    "chars": 788,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n    [TestClass]\n    public class"
  },
  {
    "path": "tests/Unity.Diagnostic/Constructor.cs",
    "chars": 2985,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Extension;\n\nnamespace Compiled.Constructor"
  },
  {
    "path": "tests/Unity.Diagnostic/Cyclic.cs",
    "chars": 786,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n\n    [TestClass]\n    public clas"
  },
  {
    "path": "tests/Unity.Diagnostic/Field.cs",
    "chars": 804,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n\n    [TestClass]\n    public clas"
  },
  {
    "path": "tests/Unity.Diagnostic/Hierarchical.cs",
    "chars": 808,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n    [TestClass]\n    public class"
  },
  {
    "path": "tests/Unity.Diagnostic/Issues.cs",
    "chars": 610,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Issues\n{\n    [TestClass]\n    public class G"
  },
  {
    "path": "tests/Unity.Diagnostic/Method.cs",
    "chars": 1553,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Extension;\n\nnamespace Compiled.Method\n{\n  "
  },
  {
    "path": "tests/Unity.Diagnostic/Overrides.cs",
    "chars": 796,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n\n    [TestClass]\n    public clas"
  },
  {
    "path": "tests/Unity.Diagnostic/Property.cs",
    "chars": 816,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n\n    [TestClass]\n    public clas"
  },
  {
    "path": "tests/Unity.Diagnostic/Registration.cs",
    "chars": 913,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Registration\n{\n    [TestClass]\n    public c"
  },
  {
    "path": "tests/Unity.Diagnostic/Unity.Specification.Tests.Diagnostic.csproj",
    "chars": 815,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework Condition=\" '$(TargetFramework)' == '' \">net4"
  },
  {
    "path": "tests/Unity.Specification/BuildUp.cs",
    "chars": 625,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n    [TestClass]\n    public class"
  },
  {
    "path": "tests/Unity.Specification/Constructor.cs",
    "chars": 2318,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled.Constructor\n{\n    [TestClass]\n    "
  },
  {
    "path": "tests/Unity.Specification/Container/Hierachy.cs",
    "chars": 330,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Container.Hierarchy;\n\nnamesp"
  },
  {
    "path": "tests/Unity.Specification/Container/IsRegistered.cs",
    "chars": 336,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Container.IsRegistered;\n\nnam"
  },
  {
    "path": "tests/Unity.Specification/Container/Registrations.cs",
    "chars": 338,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Container.Registrations;\n\nna"
  },
  {
    "path": "tests/Unity.Specification/Factory/Registration.cs",
    "chars": 332,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Factory.Registration;\n\nnames"
  },
  {
    "path": "tests/Unity.Specification/Factory/Resolution.cs",
    "chars": 328,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Factory.Resolution;\n\nnamespa"
  },
  {
    "path": "tests/Unity.Specification/Field.cs",
    "chars": 1725,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled.Field\n{\n    [TestClass]\n    public"
  },
  {
    "path": "tests/Unity.Specification/Issues.cs",
    "chars": 539,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Issues\n{\n    [TestClass]\n    public class G"
  },
  {
    "path": "tests/Unity.Specification/Lifetime.cs",
    "chars": 629,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled\n{\n    [TestClass]\n    public class"
  },
  {
    "path": "tests/Unity.Specification/Method.cs",
    "chars": 2802,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled.Method\n{\n    [TestClass]\n    publi"
  },
  {
    "path": "tests/Unity.Specification/Parameter.cs",
    "chars": 2822,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled.Parameter\n{\n    [TestClass]\n    pu"
  },
  {
    "path": "tests/Unity.Specification/Property.cs",
    "chars": 1743,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Compiled.Property\n{\n    [TestClass]\n    pub"
  },
  {
    "path": "tests/Unity.Specification/Registration.cs",
    "chars": 1482,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\n\nnamespace Registration\n{\n    [TestClass]\n    public c"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Array.cs",
    "chars": 324,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Array;\n\nnamespace"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Basics.cs",
    "chars": 326,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Basics;\n\nnamespac"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Deferred.cs",
    "chars": 330,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Deferred;\n\nnamesp"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Enumerable.cs",
    "chars": 334,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Enumerable;\n\nname"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Generic.cs",
    "chars": 328,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Generic;\n\nnamespa"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Lazy.cs",
    "chars": 322,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Lazy;\n\nnamespace "
  },
  {
    "path": "tests/Unity.Specification/Resolution/Mapping.cs",
    "chars": 329,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Mapping;\n\nnamespa"
  },
  {
    "path": "tests/Unity.Specification/Resolution/Overrides.cs",
    "chars": 333,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity;\nusing Unity.Specification.Resolution.Overrides;\n\nnames"
  },
  {
    "path": "tests/Unity.Specification/Unity.Specification.Tests.csproj",
    "chars": 803,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework Condition=\" '$(TargetFramework)' == '' \">net4"
  },
  {
    "path": "tests/Unity.Tests/ChildContainer/ChildContainerInterfaceChangeFixture.cs",
    "chars": 8452,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System.Collections.Generic;\nusing Unity.Lifetime;\n\nnamespace U"
  },
  {
    "path": "tests/Unity.Tests/ChildContainer/ITestContainer.cs",
    "chars": 87,
    "preview": "namespace Unity.Tests.v5.ChildContainer\n{\n    public interface ITestContainer\n    { }\n}"
  },
  {
    "path": "tests/Unity.Tests/ChildContainer/TestContainer.cs",
    "chars": 390,
    "preview": "using System;\n\nnamespace Unity.Tests.v5.ChildContainer\n{\n    public class TestContainer : ITestContainer, IDisposable\n  "
  },
  {
    "path": "tests/Unity.Tests/ChildContainer/TestContainer1.cs",
    "chars": 100,
    "preview": "namespace Unity.Tests.v5.ChildContainer\n{\n    public class TestContainer1 : ITestContainer\n    { }\n}"
  },
  {
    "path": "tests/Unity.Tests/ChildContainer/TestContainer2.cs",
    "chars": 100,
    "preview": "namespace Unity.Tests.v5.ChildContainer\n{\n    public class TestContainer2 : ITestContainer\n    { }\n}"
  },
  {
    "path": "tests/Unity.Tests/ChildContainer/TestContainer3.cs",
    "chars": 399,
    "preview": "using System;\n\nnamespace Unity.Tests.v5.ChildContainer\n{\n    public class TestContainer3 : ITestContainer, IDisposable\n "
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/CollectionSupportFixture.cs",
    "chars": 10318,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Thread"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/ConfigurationTestClass.cs",
    "chars": 965,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class ConfigurationTestClass\n    {\n        private TestClass[] a"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/ConfigurationTestClassGeneric.cs",
    "chars": 925,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class ConfigurationTestClassGeneric<T>\n    {\n        private T[]"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/ITestInterface.cs",
    "chars": 96,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public interface ITestInterface\n    {\n    }\n}\n"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClass.cs",
    "chars": 180,
    "preview": "using System;\n\nnamespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClass : ITestInterface\n    {\n        pu"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassDerived.cs",
    "chars": 96,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassDerived : TestClass { }\n}"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithArrayDependency.cs",
    "chars": 177,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithArrayDependency\n    {\n        [Dependency]\n  "
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithDependencyArrayConstructor.cs",
    "chars": 304,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithDependencyArrayConstructor\n    {\n        publ"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithDependencyArrayMethod.cs",
    "chars": 299,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithDependencyArrayMethod\n    {\n        public Te"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithDependencyArrayProperty.cs",
    "chars": 185,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithDependencyArrayProperty\n    {\n        [Depend"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithDependencyEnumerableConstructor.cs",
    "chars": 373,
    "preview": "using System.Collections.Generic;\n\nnamespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithDependenc"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithDependencyTypeConstructor.cs",
    "chars": 302,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithDependencyTypeConstructor\n    {\n        publi"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithDependencyTypeMethod.cs",
    "chars": 299,
    "preview": "namespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithDependencyTypeMethod\n    {\n        public Tes"
  },
  {
    "path": "tests/Unity.Tests/CollectionSupport/TestClassWithEnumerableDependency.cs",
    "chars": 230,
    "preview": "using System.Collections.Generic;\n\nnamespace Unity.Tests.v5.CollectionSupport\n{\n    public class TestClassWithEnumerabl"
  },
  {
    "path": "tests/Unity.Tests/Container/ContainerBuildUpFixture.cs",
    "chars": 12708,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing Unity.Exceptions;\nusing Unity.Tests.v5.TestSuppo"
  },
  {
    "path": "tests/Unity.Tests/Container/ContainerControlledLifetimeThreadingFixture.cs",
    "chars": 4018,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Threading;\nusing Unity.Builder;\nusing Un"
  },
  {
    "path": "tests/Unity.Tests/Container/ContainerDefaultContentFixture.cs",
    "chars": 1433,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Unity.Tests.v5.Container\n{\n    [TestClass]\n    public cl"
  },
  {
    "path": "tests/Unity.Tests/Container/SeparateContainerFixture.cs",
    "chars": 6618,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing Unity.Lifetime;\n\nnamespace Unity.Tests.v5.Contai"
  },
  {
    "path": "tests/Unity.Tests/Container/UnityExtensionFixture.cs",
    "chars": 4998,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity.Builder;\nusing Unity.Extension;\nusing Unity.Tests.v5.Te"
  },
  {
    "path": "tests/Unity.Tests/Container/UnityHierarchyFixture.cs",
    "chars": 4889,
    "preview": "using Microsoft.Practices.Unity.Tests.TestObjects;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System.Col"
  },
  {
    "path": "tests/Unity.Tests/ContainerRegistration/AnotherTypeImplementation.cs",
    "chars": 486,
    "preview": "\nnamespace Unity.Tests.v5.ContainerRegistration\n{\n    internal class AnotherTypeImplementation : ITypeAnotherInterface\n"
  },
  {
    "path": "tests/Unity.Tests/ContainerRegistration/GivenContainerIntrospectionCorrectUsageFixture.cs",
    "chars": 3685,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity.Injection;\n\nnamespace Unity.Tests.v5.ContainerRegistrat"
  },
  {
    "path": "tests/Unity.Tests/ContainerRegistration/ITypeAnotherInterface.cs",
    "chars": 136,
    "preview": "\nnamespace Unity.Tests.v5.ContainerRegistration\n{\n    internal interface ITypeAnotherInterface\n    {\n        string Get"
  },
  {
    "path": "tests/Unity.Tests/ContainerRegistration/ITypeInterface.cs",
    "chars": 128,
    "preview": "namespace Unity.Tests.v5.ContainerRegistration\n{\n    internal interface ITypeInterface\n    {\n        string GetName();\n"
  },
  {
    "path": "tests/Unity.Tests/ContainerRegistration/TypeImplementation.cs",
    "chars": 441,
    "preview": "namespace Unity.Tests.v5.ContainerRegistration\n{\n    internal class TypeImplementation : ITypeInterface\n    {\n        p"
  },
  {
    "path": "tests/Unity.Tests/Extensions/DefaultLifetimeExtensionTests.cs",
    "chars": 3811,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing Unity.Lifetime;\n\nnamespace Unity.Tests.v5\n{\n   "
  },
  {
    "path": "tests/Unity.Tests/Extensions/DiagnosticExtensionTests.cs",
    "chars": 5133,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing Unity.Extension;\n\nnamespace Unity.Tests.v5\n{\n  "
  },
  {
    "path": "tests/Unity.Tests/Extensions/LegacyExtensionTests.cs",
    "chars": 3026,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity.Extension;\n\nnamespace Unity.Tests.v5\n{\n    [TestClass]\n"
  },
  {
    "path": "tests/Unity.Tests/Generics/ClassWithConstMethodandProperty.cs",
    "chars": 510,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class ClassWithConstMethodandProperty<T>\n    {\n        private T value;\n "
  },
  {
    "path": "tests/Unity.Tests/Generics/Foo.cs",
    "chars": 299,
    "preview": "\nnamespace Unity.Tests.v5.Generics\n{\n    public class Foo<TEntity> : IFoo<TEntity>\n    {\n        public Foo()\n        {\n"
  },
  {
    "path": "tests/Unity.Tests/Generics/FooRepository.cs",
    "chars": 100,
    "preview": "\nnamespace Unity.Tests.v5.Generics\n{\n    public class FooRepository : IRepository<Foo>\n    {\n    }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenMockLogger.cs",
    "chars": 93,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenMockLogger : IGenLogger\n    {\n    }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenSpecialLogger.cs",
    "chars": 96,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenSpecialLogger : IGenLogger\n    {\n    }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericA.cs",
    "chars": 67,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenericA { }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericB.cs",
    "chars": 67,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenericB { }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericC.cs",
    "chars": 67,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenericC { }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericChainingFixture.cs",
    "chars": 7069,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing Unity.Injection;\nusing Unity.Lifetime;\nusing Un"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericConstraintsFixture.cs",
    "chars": 961,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity.Exceptions;\n\nnamespace Unity.Tests.v5.Generics\n{\n    [T"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericD.cs",
    "chars": 68,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenericD { }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericList.cs",
    "chars": 119,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class GenericList<T>\n    {\n        private void Add(T input) { }\n    }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericParameterFixture.cs",
    "chars": 3547,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Unity.Exceptions;\nusing Unity.Injection;\nusing Unity.Tests.v5"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericResolvedArrayParameterFixture.cs",
    "chars": 5773,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Reflection;\nusing Unity.Injection;\n\nname"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericsFixture.cs",
    "chars": 13602,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections;\nusing System.Collections.Gen"
  },
  {
    "path": "tests/Unity.Tests/Generics/GenericsReflectionExperimentsFixture.cs",
    "chars": 7837,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n"
  },
  {
    "path": "tests/Unity.Tests/Generics/HaveAGenericType.cs",
    "chars": 481,
    "preview": "\nnamespace Unity.Tests.v5.Generics\n{\n    public class HaveAGenericType<T1> : IHaveAGenericType<T1>\n    {\n        public "
  },
  {
    "path": "tests/Unity.Tests/Generics/HaveManyGenericTypes.cs",
    "chars": 1598,
    "preview": "\nnamespace Unity.Tests.v5.Generics\n{\n    public class HaveManyGenericTypes<T1, T2, T3, T4> : IHaveManyGenericTypes<T1, T"
  },
  {
    "path": "tests/Unity.Tests/Generics/HaveManyGenericTypesClosed.cs",
    "chars": 1710,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public class HaveManyGenericTypesClosed : IHaveManyGenericTypesClosed\n    {\n    "
  },
  {
    "path": "tests/Unity.Tests/Generics/IFoo.cs",
    "chars": 154,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public interface IFoo<TEntity>\n    {\n        TEntity Value { get; }\n    }\n\n    p"
  },
  {
    "path": "tests/Unity.Tests/Generics/IGenLogger.cs",
    "chars": 81,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public interface IGenLogger\n    {\n    }\n}"
  },
  {
    "path": "tests/Unity.Tests/Generics/IHaveAGenericType.cs",
    "chars": 153,
    "preview": "namespace Unity.Tests.v5.Generics\n{\n    public interface IHaveAGenericType<T1>\n    {\n        T1 PropT1 { get; set; }\n\n  "
  }
]

// ... and 112 more files (download for full content)

About this extraction

This page contains the full source code of the unitycontainer/container GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 312 files (776.1 KB), approximately 165.8k tokens, and a symbol index with 1671 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!