Releasing legacy support for MVC
This commit is contained in:
Родитель
b865ab6d70
Коммит
890244f62c
|
@ -0,0 +1,288 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
*_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
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# 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
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
|
@ -0,0 +1,201 @@
|
|||
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 {yyyy} {name of copyright owner}
|
||||
|
||||
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.
|
|
@ -0,0 +1,7 @@
|
|||
[![Build status](https://ci.appveyor.com/api/projects/status/wh7x0lml55c483st/branch/master?svg=true)](https://ci.appveyor.com/project/IoC-Unity/interception-configuration/branch/master)
|
||||
[![codecov](https://codecov.io/gh/unitycontainer/interception-configuration/branch/master/graph/badge.svg)](https://codecov.io/gh/unitycontainer/interception-configuration)
|
||||
[![License](https://img.shields.io/badge/license-apache%202.0-60C060.svg)](https://github.com/unitycontainer/interception-configuration/blob/master/LICENSE)
|
||||
[![NuGet](https://img.shields.io/nuget/dt/Unity.Interception.Configuration.svg)](https://www.nuget.org/packages/Unity.Interception.Configuration)
|
||||
[![NuGet](https://img.shields.io/nuget/v/Unity.Interception.Configuration.svg)](https://www.nuget.org/packages/Unity.Interception.Configuration)
|
||||
|
||||
# MVC
|
|
@ -0,0 +1,25 @@
|
|||
image: Visual Studio 2017
|
||||
configuration: Release
|
||||
platform: Any CPU
|
||||
|
||||
before_build:
|
||||
- cmd: dotnet restore
|
||||
|
||||
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"
|
||||
|
||||
after_test:
|
||||
- codecov -f "results.xml"
|
||||
|
||||
artifacts:
|
||||
- path: '**\Unity.*.nupkg'
|
||||
name: 'Unity'
|
|
@ -0,0 +1,4 @@
|
|||
ignore:
|
||||
- "tests/*" # Ignore tests
|
||||
- "src/Utility/*" # Ignore utilities
|
||||
- "**/*.Designer.cs" # Ignore generated code
|
|
@ -0,0 +1,35 @@
|
|||
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.Mvc", "src\Unity.Mvc.csproj", "{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVC.Tests", "tests\MVC.Tests.csproj", "{98E27D55-D3DA-4D24-8282-74993989AAA2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Package|Any CPU = Package|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}.Package|Any CPU.ActiveCfg = Package|Any CPU
|
||||
{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}.Package|Any CPU.Build.0 = Package|Any CPU
|
||||
{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EECD2BD0-11FC-4A97-8187-E2CA7A744CC4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{98E27D55-D3DA-4D24-8282-74993989AAA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{98E27D55-D3DA-4D24-8282-74993989AAA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{98E27D55-D3DA-4D24-8282-74993989AAA2}.Package|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{98E27D55-D3DA-4D24-8282-74993989AAA2}.Package|Any CPU.Build.0 = Debug|Any CPU
|
||||
{98E27D55-D3DA-4D24-8282-74993989AAA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{98E27D55-D3DA-4D24-8282-74993989AAA2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {7D864CD1-AEA6-4EDF-B8F8-071CE7F88251}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,6 +0,0 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Mvc", Justification = "Consistent with MVC spelling")]
|
||||
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Mvc", Scope = "namespace", Target = "Microsoft.Practices.Unity.Mvc", Justification = "Consistent with MVC spelling")]
|
||||
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "Microsoft.Practices.Unity.Mvc", Justification = "Reviewed")]
|
||||
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "Microsoft.Practices.Unity", Justification = "Reviewed")]
|
|
@ -1,9 +1,9 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.Practices.Unity.Mvc;
|
||||
using Unity.Lifetime;
|
||||
|
||||
namespace Microsoft.Practices.Unity
|
||||
namespace Unity.Mvc
|
||||
{
|
||||
/// <summary>
|
||||
/// A <see cref="LifetimeManager"/> that holds onto the instance given to it during
|
||||
|
@ -32,7 +32,7 @@ namespace Microsoft.Practices.Unity
|
|||
/// </remarks>
|
||||
public class PerRequestLifetimeManager : LifetimeManager
|
||||
{
|
||||
private readonly object lifetimeKey = new object();
|
||||
private readonly object _lifetimeKey = new object();
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a value from the backing store associated with this lifetime policy.
|
||||
|
@ -40,7 +40,7 @@ namespace Microsoft.Practices.Unity
|
|||
/// <returns>The desired object, or null if no such object is currently stored.</returns>
|
||||
public override object GetValue()
|
||||
{
|
||||
return UnityPerRequestHttpModule.GetValue(this.lifetimeKey);
|
||||
return UnityPerRequestHttpModule.GetValue(_lifetimeKey);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -49,7 +49,7 @@ namespace Microsoft.Practices.Unity
|
|||
/// <param name="newValue">The object being stored.</param>
|
||||
public override void SetValue(object newValue)
|
||||
{
|
||||
UnityPerRequestHttpModule.SetValue(this.lifetimeKey, newValue);
|
||||
UnityPerRequestHttpModule.SetValue(_lifetimeKey, newValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -57,14 +57,11 @@ namespace Microsoft.Practices.Unity
|
|||
/// </summary>
|
||||
public override void RemoveValue()
|
||||
{
|
||||
var disposable = this.GetValue() as IDisposable;
|
||||
var disposable = GetValue() as IDisposable;
|
||||
|
||||
if (disposable != null)
|
||||
{
|
||||
disposable.Dispose();
|
||||
}
|
||||
disposable?.Dispose();
|
||||
|
||||
UnityPerRequestHttpModule.SetValue(this.lifetimeKey, null);
|
||||
UnityPerRequestHttpModule.SetValue(_lifetimeKey, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,72 +0,0 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.34011
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Microsoft.Practices.Unity.Mvc.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Practices.Unity.Mvc.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The PerRequestLifetimeManager can only be used in the context of an HTTP request. Possible causes for this error are using the lifetime manager on a non-ASP.NET application, or using it in a thread that is not associated with the appropriate synchronization context..
|
||||
/// </summary>
|
||||
internal static string ErrorHttpContextNotAvailable {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorHttpContextNotAvailable", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,123 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ErrorHttpContextNotAvailable" xml:space="preserve">
|
||||
<value>The PerRequestLifetimeManager can only be used in the context of an HTTP request. Possible causes for this error are using the lifetime manager on a non-ASP.NET application, or using it in a thread that is not associated with the appropriate synchronization context.</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,64 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Description>Unity MVC</Description>
|
||||
<Version>5.0.0</Version>
|
||||
<AssemblyVersion>5.0.0.0</AssemblyVersion>
|
||||
<FileVersion>5.0.0.0</FileVersion>
|
||||
<Copyright>Copyright © Microsoft 2008</Copyright>
|
||||
<PackageProjectUrl>https://github.com/unitycontainer/unity</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/unitycontainer/unity</RepositoryUrl>
|
||||
<PackageLicenseUrl>https://github.com/unitycontainer/unity/blob/master/LICENSE</PackageLicenseUrl>
|
||||
<PackageIconUrl>https://avatars1.githubusercontent.com/u/12849707</PackageIconUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageReleaseNotes>This package is compatible with .NET 4.5, and 4.7 frameworks.</PackageReleaseNotes>
|
||||
<PackageId>Unity.Mvc</PackageId>
|
||||
<Authors>Microsoft.Practices.Unity</Authors>
|
||||
<Company>Microsoft.Practices.Unity</Company>
|
||||
<Configurations>Debug;Release;Package</Configurations>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Web" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>package.snk</AssemblyOriginatorKeyFile>
|
||||
<DelaySign>false</DelaySign>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<TargetFrameworks>net47;net45</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Package'">
|
||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
|
||||
<TargetFrameworks>net47;net45</TargetFrameworks>
|
||||
<OutputPath>$(SolutionDir)\lib\</OutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<DebugType>Full</DebugType>
|
||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
|
||||
<TargetFramework>net47</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.3" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup Condition="'$(Configuration)'!='Release'">
|
||||
<ProjectReference Include="..\..\Abstractions\src\Unity.Abstractions.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<PackageReference Include="Unity.Abstractions" Version="2.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
</Project>
|
|
@ -3,15 +3,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Web.Mvc;
|
||||
using Unity.Exceptions;
|
||||
|
||||
namespace Microsoft.Practices.Unity.Mvc
|
||||
namespace Unity.Mvc
|
||||
{
|
||||
/// <summary>
|
||||
/// An implementation of <see cref="IDependencyResolver"/> that wraps a Unity container.
|
||||
/// </summary>
|
||||
public class UnityDependencyResolver : IDependencyResolver
|
||||
{
|
||||
private readonly IUnityContainer container;
|
||||
private readonly IUnityContainer _container;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UnityDependencyResolver"/> class for a container.
|
||||
|
@ -20,7 +21,7 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
/// interface implementation.</param>
|
||||
public UnityDependencyResolver(IUnityContainer container)
|
||||
{
|
||||
this.container = container;
|
||||
_container = container;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -32,11 +33,11 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
{
|
||||
if (typeof(IController).IsAssignableFrom(serviceType))
|
||||
{
|
||||
return this.container.Resolve(serviceType);
|
||||
return _container.Resolve(serviceType);
|
||||
}
|
||||
try
|
||||
{
|
||||
return this.container.Resolve(serviceType);
|
||||
return _container.Resolve(serviceType);
|
||||
}
|
||||
catch (ResolutionFailedException)
|
||||
{
|
||||
|
@ -51,7 +52,7 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
/// <returns>The requested services.</returns>
|
||||
public IEnumerable<object> GetServices(Type serviceType)
|
||||
{
|
||||
return this.container.ResolveAll(serviceType);
|
||||
return _container.ResolveAll(serviceType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Web.Mvc;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.Practices.Unity.Mvc
|
||||
namespace Unity.Mvc
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines a filter provider for filter attributes that support injection of Unity dependencies.
|
||||
/// </summary>
|
||||
public class UnityFilterAttributeFilterProvider : FilterAttributeFilterProvider
|
||||
{
|
||||
private readonly IUnityContainer container;
|
||||
private readonly IUnityContainer _container;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UnityFilterAttributeFilterProvider"/> class.
|
||||
|
@ -18,7 +18,7 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
/// <param name="container">The <see cref="IUnityContainer"/> that will be used to inject the filters.</param>
|
||||
public UnityFilterAttributeFilterProvider(IUnityContainer container)
|
||||
{
|
||||
this.container = container;
|
||||
_container = container;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -33,7 +33,7 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
|
||||
foreach (var item in list)
|
||||
{
|
||||
this.container.BuildUp(item.GetType(), item);
|
||||
_container.BuildUp(item.GetType(), item);
|
||||
}
|
||||
|
||||
return list;
|
||||
|
@ -51,7 +51,7 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
|
||||
foreach (var item in list)
|
||||
{
|
||||
this.container.BuildUp(item.GetType(), item);
|
||||
_container.BuildUp(item.GetType(), item);
|
||||
}
|
||||
|
||||
return list;
|
||||
|
|
|
@ -2,13 +2,10 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Microsoft.Practices.Unity.Mvc.Properties;
|
||||
using Microsoft.Practices.Unity.Utility;
|
||||
|
||||
namespace Microsoft.Practices.Unity.Mvc
|
||||
namespace Unity.Mvc
|
||||
{
|
||||
/// <summary>
|
||||
/// Implementation of the <see cref="IHttpModule"/> interface that provides support for using the
|
||||
|
@ -25,9 +22,7 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
|
||||
if (dict != null)
|
||||
{
|
||||
object obj = null;
|
||||
|
||||
if (dict.TryGetValue(lifetimeManagerKey, out obj))
|
||||
if (dict.TryGetValue(lifetimeManagerKey, out var obj))
|
||||
{
|
||||
return obj;
|
||||
}
|
||||
|
@ -62,11 +57,9 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
/// </summary>
|
||||
/// <param name="context">An <see cref="HttpApplication"/> that provides access to the methods, properties,
|
||||
/// and events common to all application objects within an ASP.NET application.</param>
|
||||
[SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Validated with Guard class")]
|
||||
public void Init(HttpApplication context)
|
||||
{
|
||||
Guard.ArgumentNotNull(context, "context");
|
||||
context.EndRequest += OnEndRequest;
|
||||
(context ?? throw new ArgumentNullException(nameof(context))).EndRequest += OnEndRequest;
|
||||
}
|
||||
|
||||
private void OnEndRequest(object sender, EventArgs e)
|
||||
|
@ -88,7 +81,8 @@ namespace Microsoft.Practices.Unity.Mvc
|
|||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new InvalidOperationException(Resources.ErrorHttpContextNotAvailable);
|
||||
throw new InvalidOperationException(
|
||||
"The PerRequestLifetimeManager can only be used in the context of an HTTP request.Possible causes for this error are using the lifetime manager on a non-ASP.NET application, or using it in a thread that is not associated with the appropriate synchronization context.");
|
||||
}
|
||||
|
||||
var dict = (Dictionary<object, object>)context.Items[ModuleKey];
|
||||
|
|
Двоичный файл не отображается.
|
@ -0,0 +1,38 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net47</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<RootNamespace>Unity.Interception.Tests</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0-preview-20171012-09" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.2.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\src\Unity.Mvc.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Web" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(Configuration)' != 'Release' ">
|
||||
<ProjectReference Include="..\..\Abstractions\src\Unity.Abstractions.csproj" />
|
||||
<ProjectReference Include="..\..\Container\src\Unity.Container.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<PackageReference Include="Unity.Abstractions" Version="2.0.1" />
|
||||
<PackageReference Include="Unity.Container" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -3,8 +3,11 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using Microsoft.Practices.Unity.Mvc;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Unity;
|
||||
using Unity.Exceptions;
|
||||
using Unity.Lifetime;
|
||||
using Unity.Mvc;
|
||||
|
||||
namespace Microsoft.Practices.Unity.WebIntegation.Tests
|
||||
{
|
||||
|
@ -108,9 +111,9 @@ namespace Microsoft.Practices.Unity.WebIntegation.Tests
|
|||
|
||||
public IFoo Foo { get; set; }
|
||||
|
||||
void IController.Execute(System.Web.Routing.RequestContext requestContext)
|
||||
|
||||
public void Execute(System.Web.Routing.RequestContext requestContext)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using Microsoft.Practices.Unity.Mvc;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Unity;
|
||||
using Unity.Injection;
|
||||
using Unity.Mvc;
|
||||
|
||||
namespace Microsoft.Practices.Unity.WebIntegation.Tests
|
||||
{
|
||||
|
|
|
@ -1,237 +0,0 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Http.Controllers;
|
||||
using Microsoft.Practices.Unity.WebApi;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.Practices.Unity.WebIntegation.Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class WebApiUnityDependencyResolverFixture
|
||||
{
|
||||
[TestMethod]
|
||||
public void When_resolving_then_returns_registered_instance()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
var actual = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
Assert.AreEqual("value", actual.TestProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_multiple_then_returns_all_registered_instances()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>("instance1", new Foo { TestProperty = "value1" });
|
||||
container.RegisterInstance<IFoo>("instance2", new Foo { TestProperty = "value2" });
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
var actual = resolver.GetServices(typeof(IFoo)).Cast<IFoo>().ToList();
|
||||
Assert.IsTrue(actual.Any(x => x.TestProperty == "value1"));
|
||||
Assert.IsTrue(actual.Any(x => x.TestProperty == "value2"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_unregistered_type_then_returns_null()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
Assert.IsNull(resolver.GetService(typeof(IFoo)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_concrete_controller_inside_scope_then_returns_injected_instance()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
var actual = (TestController)scope.GetService(typeof(TestController));
|
||||
Assert.AreEqual("value", actual.Foo.TestProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_controller_inside_scope_with_unregistered_dependencies_then_throws()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
AssertThrows<ResolutionFailedException>(() => scope.GetService(typeof(TestController)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_unregistered_type_inside_scope_then_throws()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
AssertThrows<ResolutionFailedException>(() => scope.GetService(typeof(IFoo)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_disposing_resolver_then_disposes_container()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
var resolver = new UnityDependencyResolver(container);
|
||||
resolver.Dispose();
|
||||
|
||||
// ObjectDisposedException?
|
||||
AssertThrows<ResolutionFailedException>(() => container.Resolve(typeof(IFoo)));
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_disposing_scope_then_does_not_dispose_container()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
resolver.BeginScope().Dispose();
|
||||
|
||||
var actual = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
|
||||
Assert.AreEqual("value", actual.TestProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_type_with_container_controlled_lifetime_then_returns_same_instance_every_time()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
IFoo parentResolve = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
IFoo scope1Resolve;
|
||||
IFoo scope2Resolve;
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope1Resolve = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope2Resolve = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
Assert.IsNotNull(parentResolve);
|
||||
Assert.AreSame(parentResolve, scope1Resolve);
|
||||
Assert.AreSame(parentResolve, scope2Resolve);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_type_with_hierarchical_lifetime_then_returns_same_instance_every_time()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterType<IFoo, Foo>(new HierarchicalLifetimeManager());
|
||||
using (var resolver = new UnityDependencyResolver(container))
|
||||
{
|
||||
IFoo parentResolve = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
IFoo scope1Resolve;
|
||||
IFoo scope2Resolve;
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope1Resolve = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope2Resolve = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
Assert.IsNotNull(parentResolve);
|
||||
Assert.AreSame(parentResolve, scope1Resolve);
|
||||
Assert.AreSame(parentResolve, scope2Resolve);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface IFoo
|
||||
{
|
||||
string TestProperty { get; set; }
|
||||
}
|
||||
|
||||
public class Foo : IFoo
|
||||
{
|
||||
public string TestProperty { get; set; }
|
||||
}
|
||||
|
||||
public class TestController : IHttpController
|
||||
{
|
||||
public TestController(IFoo foo)
|
||||
{
|
||||
this.Foo = foo;
|
||||
}
|
||||
|
||||
public IFoo Foo { get; set; }
|
||||
|
||||
System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> IHttpController.ExecuteAsync(HttpControllerContext controllerContext, System.Threading.CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
private static void AssertThrows<TException>(Action action)
|
||||
where TException : Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
}
|
||||
catch (TException)
|
||||
{
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Assert.Fail("Expected exception {0}, but instead exception {1} was thrown",
|
||||
typeof(TException).Name,
|
||||
ex.GetType().Name);
|
||||
}
|
||||
Assert.Fail("Expected exception {0}, no exception thrown", typeof(TException).Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,252 +0,0 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Http.Controllers;
|
||||
using Microsoft.Practices.Unity.WebApi;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.Practices.Unity.WebIntegation.Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class WebApiUnityHierarchicalDependencyResolverFixture
|
||||
{
|
||||
[TestMethod]
|
||||
public void When_resolving_then_returns_registered_instance()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
var actual = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
Assert.AreEqual("value", actual.TestProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_multiple_then_returns_all_registered_instances()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>("instance1", new Foo { TestProperty = "value1" });
|
||||
container.RegisterInstance<IFoo>("instance2", new Foo { TestProperty = "value2" });
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
var actual = resolver.GetServices(typeof(IFoo)).Cast<IFoo>().ToList();
|
||||
Assert.IsTrue(actual.Any(x => x.TestProperty == "value1"));
|
||||
Assert.IsTrue(actual.Any(x => x.TestProperty == "value2"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_unregistered_type_then_returns_null()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
Assert.IsNull(resolver.GetService(typeof(IFoo)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_concrete_controller_inside_scope_then_returns_injected_instance()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
var actual = (TestController)scope.GetService(typeof(TestController));
|
||||
Assert.AreEqual("value", actual.Foo.TestProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_controller_inside_scope_with_unregistered_dependencies_then_throws()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
AssertThrows<ResolutionFailedException>(() => scope.GetService(typeof(TestController)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_unregistered_type_inside_scope_then_throws()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
AssertThrows<ResolutionFailedException>(() => scope.GetService(typeof(IFoo)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_disposing_resolver_then_disposes_container()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
var resolver = new UnityHierarchicalDependencyResolver(container);
|
||||
resolver.Dispose();
|
||||
|
||||
// ObjectDisposedException?
|
||||
AssertThrows<ResolutionFailedException>(() => container.Resolve(typeof(IFoo)));
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_disposing_scope_then_does_not_dispose_container()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterInstance<IFoo>(new Foo { TestProperty = "value" });
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
resolver.BeginScope().Dispose();
|
||||
|
||||
var actual = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
|
||||
Assert.AreEqual("value", actual.TestProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_type_with_container_controlled_lifetime_then_returns_same_instance_every_time()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
IFoo parentResolve = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
IFoo scope1Resolve;
|
||||
IFoo scope2Resolve;
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope1Resolve = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope2Resolve = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
Assert.IsNotNull(parentResolve);
|
||||
Assert.AreSame(parentResolve, scope1Resolve);
|
||||
Assert.AreSame(parentResolve, scope2Resolve);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void When_resolving_type_with_hierarchical_lifetime_then_returns_different_instance_in_each_scope()
|
||||
{
|
||||
using (var container = new UnityContainer())
|
||||
{
|
||||
container.RegisterType<IFoo, Foo>(new HierarchicalLifetimeManager());
|
||||
using (var resolver = new UnityHierarchicalDependencyResolver(container))
|
||||
{
|
||||
IFoo parentResolve = (IFoo)resolver.GetService(typeof(IFoo));
|
||||
IFoo scope1Resolve1;
|
||||
IFoo scope1Resolve2;
|
||||
IFoo scope2Resolve1;
|
||||
IFoo scope2Resolve2;
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope1Resolve1 = (IFoo)scope.GetService(typeof(IFoo));
|
||||
scope1Resolve2 = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
using (var scope = resolver.BeginScope())
|
||||
{
|
||||
scope2Resolve1 = (IFoo)scope.GetService(typeof(IFoo));
|
||||
scope2Resolve2 = (IFoo)scope.GetService(typeof(IFoo));
|
||||
}
|
||||
|
||||
Assert.IsNotNull(parentResolve);
|
||||
Assert.IsNotNull(scope1Resolve1);
|
||||
Assert.IsNotNull(scope1Resolve2);
|
||||
Assert.IsNotNull(scope2Resolve1);
|
||||
Assert.IsNotNull(scope2Resolve2);
|
||||
|
||||
Assert.AreNotSame(parentResolve, scope1Resolve1);
|
||||
Assert.AreNotSame(parentResolve, scope2Resolve1);
|
||||
|
||||
Assert.AreNotSame(scope1Resolve1, scope2Resolve1);
|
||||
|
||||
Assert.AreSame(scope1Resolve1, scope1Resolve2);
|
||||
|
||||
Assert.AreSame(scope2Resolve1, scope2Resolve2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface IFoo
|
||||
{
|
||||
string TestProperty { get; set; }
|
||||
}
|
||||
|
||||
public class Foo : IFoo
|
||||
{
|
||||
public string TestProperty { get; set; }
|
||||
}
|
||||
|
||||
public class TestController : IHttpController
|
||||
{
|
||||
public TestController(IFoo foo)
|
||||
{
|
||||
this.Foo = foo;
|
||||
}
|
||||
|
||||
public IFoo Foo { get; set; }
|
||||
|
||||
System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> IHttpController.ExecuteAsync(HttpControllerContext controllerContext, System.Threading.CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
private static void AssertThrows<TException>(Action action)
|
||||
where TException : Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
}
|
||||
catch (TException)
|
||||
{
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Assert.Fail("Expected exception {0}, but instead exception {1} was thrown",
|
||||
typeof(TException).Name,
|
||||
ex.GetType().Name);
|
||||
}
|
||||
Assert.Fail("Expected exception {0}, no exception thrown", typeof(TException).Name);
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче