Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added support for no default constructor deserialization

  • Loading branch information...
commit 238293c906681a44ddf11c895eb5caa3b76ed7b0 1 parent 43c2917
@phatboyg authored
View
BIN  lib/Newtonsoft.Json/Net/Newtonsoft.Json.dll
Binary file not shown
View
BIN  lib/Newtonsoft.Json/Net/Newtonsoft.Json.pdb
Binary file not shown
View
7,141 lib/Newtonsoft.Json/Net/Newtonsoft.Json.xml
7,141 additions, 0 deletions not shown
View
BIN  lib/Newtonsoft.Json/Net35/Newtonsoft.Json.dll
Binary file not shown
View
BIN  lib/Newtonsoft.Json/Net35/Newtonsoft.Json.pdb
Binary file not shown
View
6,982 lib/Newtonsoft.Json/Net35/Newtonsoft.Json.xml
6,982 additions, 0 deletions not shown
View
BIN  lib/Newtonsoft.Json/Newtonsoft.Json.dll
Binary file not shown
View
11 src/Magnum.1.2.dotCover
@@ -0,0 +1,11 @@
+<Configuration>
+ <CoverageFilters>
+ <IncludeFilters>
+ <Filter ModuleMask="*" ClassMask="*" FunctionMask="*" />
+ </IncludeFilters>
+ <ExcludeFilters />
+ </CoverageFilters>
+ <SnapshotDialog>
+ <InitialDirectory>D:\Home\Magnum\src</InitialDirectory>
+ </SnapshotDialog>
+</Configuration>
View
336 src/Magnum.6.1.ReSharper
@@ -0,0 +1,336 @@
+<Configuration>
+ <CodeStyleSettings>
+ <ExternalPath IsNull="False" />
+ <Sharing>SOLUTION</Sharing>
+ <CSS>
+ <FormatSettings />
+ <Naming2 />
+ </CSS>
+ <CSharp>
+ <FormatSettings>
+ <ALIGN_FIRST_ARG_BY_PAREN>True</ALIGN_FIRST_ARG_BY_PAREN>
+ <BLANK_LINES_AFTER_START_COMMENT>0</BLANK_LINES_AFTER_START_COMMENT>
+ <BLANK_LINES_AROUND_NAMESPACE>2</BLANK_LINES_AROUND_NAMESPACE>
+ <BLANK_LINES_AROUND_TYPE>2</BLANK_LINES_AROUND_TYPE>
+ <EXPLICIT_INTERNAL_MODIFIER>False</EXPLICIT_INTERNAL_MODIFIER>
+ <EXPLICIT_PRIVATE_MODIFIER>False</EXPLICIT_PRIVATE_MODIFIER>
+ <FORCE_ATTRIBUTE_STYLE>SEPARATE</FORCE_ATTRIBUTE_STYLE>
+ <FORCE_FIXED_BRACES_STYLE>ONLY_FOR_MULTILINE</FORCE_FIXED_BRACES_STYLE>
+ <FORCE_FOR_BRACES_STYLE>ONLY_FOR_MULTILINE</FORCE_FOR_BRACES_STYLE>
+ <FORCE_FOREACH_BRACES_STYLE>ONLY_FOR_MULTILINE</FORCE_FOREACH_BRACES_STYLE>
+ <FORCE_IFELSE_BRACES_STYLE>ONLY_FOR_MULTILINE</FORCE_IFELSE_BRACES_STYLE>
+ <FORCE_USING_BRACES_STYLE>ONLY_FOR_MULTILINE</FORCE_USING_BRACES_STYLE>
+ <FORCE_WHILE_BRACES_STYLE>ONLY_FOR_MULTILINE</FORCE_WHILE_BRACES_STYLE>
+ <INDENT_ANONYMOUS_METHOD_BLOCK>False</INDENT_ANONYMOUS_METHOD_BLOCK>
+ <INDENT_EMBRACED_INITIALIZER_BLOCK>False</INDENT_EMBRACED_INITIALIZER_BLOCK>
+ <MODIFIERS_ORDER IsNull="False">
+ <Item>public</Item>
+ <Item>protected</Item>
+ <Item>internal</Item>
+ <Item>private</Item>
+ <Item>new</Item>
+ <Item>abstract</Item>
+ <Item>virtual</Item>
+ <Item>override</Item>
+ <Item>sealed</Item>
+ <Item>static</Item>
+ <Item>readonly</Item>
+ <Item>extern</Item>
+ <Item>unsafe</Item>
+ <Item>volatile</Item>
+ </MODIFIERS_ORDER>
+ <PLACE_CONSTRUCTOR_INITIALIZER_ON_SAME_LINE>False</PLACE_CONSTRUCTOR_INITIALIZER_ON_SAME_LINE>
+ <PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE>False</PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE>
+ <PLACE_WHILE_ON_NEW_LINE>True</PLACE_WHILE_ON_NEW_LINE>
+ <SIMPLE_EMBEDDED_STATEMENT_STYLE>LINE_BREAK</SIMPLE_EMBEDDED_STATEMENT_STYLE>
+ <SPACE_AFTER_TYPECAST_PARENTHESES>False</SPACE_AFTER_TYPECAST_PARENTHESES>
+ <SPACE_BEFORE_SIZEOF_PARENTHESES>False</SPACE_BEFORE_SIZEOF_PARENTHESES>
+ <SPACE_BEFORE_TYPEOF_PARENTHESES>False</SPACE_BEFORE_TYPEOF_PARENTHESES>
+ <WRAP_BEFORE_BINARY_OPSIGN>True</WRAP_BEFORE_BINARY_OPSIGN>
+ <WRAP_BEFORE_FIRST_TYPE_PARAMETER_CONSTRAINT>True</WRAP_BEFORE_FIRST_TYPE_PARAMETER_CONSTRAINT>
+ <WRAP_EXTENDS_LIST_STYLE>CHOP_ALWAYS</WRAP_EXTENDS_LIST_STYLE>
+ <WRAP_MULTIPLE_TYPE_PARAMEER_CONSTRAINTS_STYLE>CHOP_ALWAYS</WRAP_MULTIPLE_TYPE_PARAMEER_CONSTRAINTS_STYLE>
+ <WRAP_OBJECT_AND_COLLECTION_INITIALIZER_STYLE>CHOP_ALWAYS</WRAP_OBJECT_AND_COLLECTION_INITIALIZER_STYLE>
+ </FormatSettings>
+ <UsingsSettings>
+ <AddImportsToDeepestScope>True</AddImportsToDeepestScope>
+ <AllowAlias>False</AllowAlias>
+ </UsingsSettings>
+ <Naming2>
+ <EventHandlerPatternLong>$object$_On$event$</EventHandlerPatternLong>
+ <EventHandlerPatternShort>$event$Handler</EventHandlerPatternShort>
+ <ExceptionName IsNull="False" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="TypesAndNamespaces" />
+ <PredefinedRule Inspect="True" Prefix="I" Suffix="" Style="AaBb" ElementKind="Interfaces" />
+ <PredefinedRule Inspect="True" Prefix="T" Suffix="" Style="AaBb" ElementKind="TypeParameters" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="MethodPropertyEvent" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="Locals" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="LocalConstants" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="Parameters" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PublicFields" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Constants" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="StaticReadonly" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="EnumMember" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Other" />
+ <PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PrivateInstanceFields" />
+ <PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PrivateStaticFields" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PrivateConstants" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PrivateStaticReadonly" />
+ </Naming2>
+ <CustomMemberReorderingPatterns><![CDATA[<?xml version="1.0" encoding="utf-8" ?>
+
+<!--
+I. Overall
+
+I.1 Each pattern can have <Match>....</Match> element. For the given type declaration, the pattern with the match, evaluated to 'true' with the largest weight, will be used
+I.2 Each pattern consists of the sequence of <Entry>...</Entry> elements. Type member declarations are distributed between entries
+I.3 If pattern has RemoveAllRegions="true" attribute, then all regions will be cleared prior to reordering. Otherwise, only auto-generated regions will be cleared
+I.4 The contents of each entry is sorted by given keys (First key is primary, next key is secondary, etc). Then the declarations are grouped and en-regioned by given property
+
+II. Available match operands
+
+Each operand may have Weight="..." attribute. This weight will be added to the match weight if the operand is evaluated to 'true'.
+The default weight is 1
+
+II.1 Boolean functions:
+II.1.1 <And>....</And>
+II.1.2 <Or>....</Or>
+II.1.3 <Not>....</Not>
+
+II.2 Operands
+II.2.1 <Kind Is="..."/>. Kinds are: class, struct, interface, enum, delegate, type, constructor, destructor, property, indexer, method, operator, field, constant, event, member
+II.2.2 <Name Is="..." [IgnoreCase="true/false"] />. The 'Is' attribute contains regular expression
+II.2.3 <HasAttribute CLRName="..." [Inherit="true/false"] />. The 'CLRName' attribute contains regular expression
+II.2.4 <Access Is="..."/>. The 'Is' values are: public, protected, internal, protected internal, private
+II.2.5 <Static/>
+II.2.6 <Abstract/>
+II.2.7 <Virtual/>
+II.2.8 <Override/>
+II.2.9 <Sealed/>
+II.2.10 <Readonly/>
+II.2.11 <ImplementsInterface CLRName="..."/>. The 'CLRName' attribute contains regular expression
+II.2.12 <HandlesEvent />
+-->
+
+<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns">
+
+ <!--Do not reorder COM interfaces-->
+ <Pattern>
+ <Match>
+ <And Weight="100">
+ <Kind Is="interface"/>
+ <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/>
+ </And>
+ </Match>
+ </Pattern>
+
+ <!--Special formatting of NUnit test fixture-->
+ <Pattern RemoveAllRegions="true">
+ <Match>
+ <And Weight="100">
+ <Kind Is="class"/>
+ <HasAttribute CLRName="NUnit.Framework.TestFixtureAttribute" Inherit="true"/>
+ </And>
+ </Match>
+
+ <!--Setup/Teardow-->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="method"/>
+ <Or>
+ <HasAttribute CLRName="NUnit.Framework.SetUpAttribute" Inherit="true"/>
+ <HasAttribute CLRName="NUnit.Framework.TearDownAttribute" Inherit="true"/>
+ <HasAttribute CLRName="NUnit.Framework.FixtureSetUpAttribute" Inherit="true"/>
+ <HasAttribute CLRName="NUnit.Framework.FixtureTearDownAttribute" Inherit="true"/>
+ </Or>
+ </And>
+ </Match>
+ </Entry>
+
+ <!--Test methods-->
+ <Entry>
+ <Match>
+ <And Weight="100">
+ <Kind Is="method"/>
+ <HasAttribute CLRName="NUnit.Framework.TestAttribute" Inherit="false"/>
+ </And>
+ </Match>
+ <Sort>
+ <Name/>
+ </Sort>
+ <Group />
+ </Entry>
+
+ <!--All other members-->
+ <Entry/>
+
+ </Pattern>
+
+ <!--Default pattern-->
+ <Pattern>
+
+ <!--public delegate-->
+ <Entry>
+ <Match>
+ <And Weight="100">
+ <Access Is="public"/>
+ <Kind Is="delegate"/>
+ </And>
+ </Match>
+ <Sort>
+ <Name/>
+ </Sort>
+ <Group />
+ </Entry>
+
+ <!--public enum-->
+ <Entry>
+ <Match>
+ <And Weight="100">
+ <Access Is="public"/>
+ <Kind Is="enum"/>
+ </And>
+ </Match>
+ <Sort>
+ <Name/>
+ </Sort>
+ <Group/>
+ </Entry>
+
+ <!--fields and constants-->
+ <Entry>
+ <Match>
+ <Or>
+ <Kind Is="constant"/>
+ <Kind Is="field"/>
+ </Or>
+ </Match>
+ <Sort>
+ <Kind Order="constant field"/>
+ <Static/>
+ <Readonly/>
+ <Name/>
+ </Sort>
+ </Entry>
+
+ <!--Constructors. Place static one first-->
+ <Entry>
+ <Match>
+ <Kind Is="constructor"/>
+ </Match>
+ <Sort>
+ <Static/>
+ </Sort>
+ </Entry>
+
+ <!--properties, indexers-->
+ <Entry>
+ <Match>
+ <Or>
+ <Kind Is="property"/>
+ <Kind Is="indexer"/>
+ </Or>
+ </Match>
+ </Entry>
+
+ <!--interface implementations-->
+ <Entry>
+ <Match>
+ <And Weight="100">
+ <Kind Is="member"/>
+ <ImplementsInterface/>
+ </And>
+ </Match>
+ <Sort>
+ <ImplementsInterface Immediate="true"/>
+ </Sort>
+ <Group />
+ </Entry>
+
+ <!--all other members-->
+ <Entry/>
+
+ <!--nested types-->
+ <Entry>
+ <Match>
+ <Kind Is="type"/>
+ </Match>
+ <Sort>
+ <Name/>
+ </Sort>
+ <Group/>
+ </Entry>
+ </Pattern>
+
+</Patterns>
+]]></CustomMemberReorderingPatterns>
+ </CSharp>
+ <HTML>
+ <FormatSettings />
+ </HTML>
+ <JavaScript>
+ <FormatSettings />
+ <Naming2 />
+ </JavaScript>
+ <VB>
+ <FormatSettings />
+ <ImportsSettings />
+ <Naming2>
+ <EventHandlerPatternLong>$object$_On$event$</EventHandlerPatternLong>
+ <EventHandlerPatternShort>$event$Handler</EventHandlerPatternShort>
+ </Naming2>
+ </VB>
+ <Web>
+ <Naming2 />
+ </Web>
+ <XML>
+ <FormatSettings />
+ </XML>
+ <Xaml>
+ <Naming2 />
+ </Xaml>
+ <FileHeader><![CDATA[Copyright 2007-2010 The Apache Software Foundation.
+
+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.]]></FileHeader>
+ <GenerateMemberBody />
+ <Naming2>
+ <EventHandlerPatternLong>$object$_On$event$</EventHandlerPatternLong>
+ <EventHandlerPatternShort>$event$Handler</EventHandlerPatternShort>
+ <ExceptionName>ex</ExceptionName>
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="Locals" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="Parameters" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="TypesAndNamespaces">
+ <ExtraRule Prefix="" Suffix="" Style="Aa_bb" />
+ </PredefinedRule>
+ <PredefinedRule Inspect="True" Prefix="I" Suffix="" Style="AaBb" ElementKind="Interfaces">
+ <ExtraRule Prefix="" Suffix="" Style="AaBb" />
+ </PredefinedRule>
+ <PredefinedRule Inspect="True" Prefix="T" Suffix="" Style="AaBb" ElementKind="TypeParameters" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="MethodPropertyEvent">
+ <ExtraRule Prefix="" Suffix="" Style="Aa_bb" />
+ </PredefinedRule>
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="LocalConstants" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PublicFields" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Constants" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="StaticReadonly" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="EnumMember" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Other" />
+ <PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PrivateInstanceFields" />
+ <PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PrivateStaticFields" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PrivateConstants" />
+ <PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PrivateStaticReadonly">
+ <ExtraRule Prefix="_" Suffix="" Style="aaBb" />
+ </PredefinedRule>
+ </Naming2>
+ </CodeStyleSettings>
+</Configuration>
View
4 src/Magnum.Routing/Magnum.Routing.csproj.DotSettings
@@ -0,0 +1,4 @@
+<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
+ <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Binders/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Configuration/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Exceptions/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
View
2  src/Magnum.Routing/Magnum.Routing.csproj.DotSettings.user
@@ -0,0 +1,2 @@
+<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
+ <s:Boolean x:Key="/Default/Housekeeping/ProjectSettingsUpgraded/IsUpgraded/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
View
49 src/Magnum.Specs/Activator/NoDefaultConstructor_Specs.cs
@@ -0,0 +1,49 @@
+namespace Magnum.Specs.Activator
+{
+ using Magnum.Reflection;
+ using NUnit.Framework;
+ using TestFramework;
+
+
+ [TestFixture]
+ public class When_a_class_has_no_default_constructor
+ {
+ [Test]
+ public void Should_be_able_to_create_one()
+ {
+ var subject = FastActivator<Subject>.Create();
+
+ subject.ShouldNotBeNull();
+ }
+
+
+ [Test]
+ public void Should_be_able_to_create_a_generic_type()
+ {
+ var subject = FastActivator.Create(typeof(GenericSubject<>), new[] {typeof(int)});
+
+ subject.ShouldNotBeNull();
+ }
+
+ class Subject
+ {
+ public Subject(string value)
+ {
+ Value = value;
+ }
+
+ public string Value { get; private set; }
+ }
+
+
+ class GenericSubject<T>
+ {
+ public GenericSubject(T value)
+ {
+ Value = value;
+ }
+
+ public T Value { get; private set; }
+ }
+ }
+}
View
14 src/Magnum.Specs/Magnum.Specs.csproj
@@ -74,10 +74,13 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\log4net\log4net.dll</HintPath>
</Reference>
- <Reference Include="Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
- <HintPath>..\..\lib\Newtonsoft.Json\Newtonsoft.Json.dll</HintPath>
+ <Reference Include="Newtonsoft.Json" Condition="'$(TargetFrameworkVersion)' == 'v3.5'">
+ <HintPath>..\..\lib\Newtonsoft.Json\Net35\Newtonsoft.Json.dll</HintPath>
</Reference>
- <Reference Include="nunit.framework, Version=2.5.2.9222, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
+ <Reference Include="Newtonsoft.Json" Condition="'$(TargetFrameworkVersion)' == 'v4.0'">
+ <HintPath>..\..\lib\Newtonsoft.Json\Net\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="nunit.framework, Version=2.5.2.9222, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\nunit\net-2.0\nunit.framework.dll</HintPath>
</Reference>
@@ -110,6 +113,7 @@
<Compile Include="Activator\Benchmarks\NewActivatorRunner.cs" />
<Compile Include="Activator\Benchmarks\SingleArgumentConstructorBenchmark.cs" />
<Compile Include="Activator\Benchmarks\TwoArgumentConstructorBenchmark.cs" />
+ <Compile Include="Activator\NoDefaultConstructor_Specs.cs" />
<Compile Include="Algorithms\DependencyGraph_Specs.cs" />
<Compile Include="Algorithms\Edge_Specs.cs" />
<Compile Include="Algorithms\NodeList_Specs.cs" />
@@ -362,11 +366,11 @@
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
-</Project>
+</Project>
View
11 src/Magnum/Magnum.csproj
@@ -76,8 +76,11 @@
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\..\lib\Newtonsoft.Json\Newtonsoft.Json.dll</HintPath>
+ <Reference Include="Newtonsoft.Json" Condition="'$(TargetFrameworkVersion)' == 'v3.5'">
+ <HintPath>..\..\lib\Newtonsoft.Json\Net35\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json" Condition="'$(TargetFrameworkVersion)' == 'v4.0'">
+ <HintPath>..\..\lib\Newtonsoft.Json\Net\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
@@ -601,11 +604,11 @@
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
-</Project>
+</Project>
View
27 src/Magnum/Reflection/FastActivator.1.cs
@@ -17,6 +17,8 @@ namespace Magnum.Reflection
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
+ using System.Runtime.Serialization;
+ using System.Runtime.Serialization.Formatters.Binary;
using Extensions;
@@ -97,21 +99,30 @@ void InitializeNew()
.MatchingArguments()
.SingleOrDefault();
- if (constructorInfo == null)
- throw new FastActivatorException(typeof(T), "No usable constructor found");
+ if (constructorInfo == null)
+ {
+ _new = CreateUsingSerialization;
+ }
+ else
+ {
+ Func<T> lambda = Expression.Lambda<Func<T>>(Expression.New(constructorInfo)).Compile();
- Func<T> lambda = Expression.Lambda<Func<T>>(Expression.New(constructorInfo)).Compile();
+ _new = lambda;
+ }
- _new = lambda;
-
- return lambda();
+ return _new();
};
}
+ T CreateUsingSerialization()
+ {
+ return (T)FormatterServices.GetUninitializedObject(typeof(T));
+ }
+
T CreateFromArgs(object[] args)
{
- if (args == null)
- args = new object[] {};
+ if (args == null || args.Length == 0)
+ return _new();
int offset = 0;
int key = args.Aggregate(0, (x, o) => x ^ (o == null ? offset : o.GetType().GetHashCode() << offset++));
Please sign in to comment.
Something went wrong with that request. Please try again.