FastExpressionCompiler 1.9.0
FastExpressionCompiler is up to ~20 times faster than Expression.Compile()
See the version list below for details.
Install-Package FastExpressionCompiler -Version 1.9.0
dotnet add package FastExpressionCompiler --version 1.9.0
<PackageReference Include="FastExpressionCompiler" Version="1.9.0" />
paket add FastExpressionCompiler --version 1.9.0
Release Notes
v1.9.0
- fixed: #72 Try CompileFast for MS.Extensions.ObjectMethodExecutor
- fixed: #73 Tried with Moq and some tests failed
- added: Support for implicit / explicit conversion in Expression.Convert
v1.9.0
- fixed: #72 Try CompileFast for MS.Extensions.ObjectMethodExecutor
- fixed: #73 Tried with Moq and some tests failed
v1.8.0
- added: missing Expressions property to NewArrayExpressionInfo
- fixed: #71 In Action delegates - Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type
- changed: small performance optimizations
v1.7.2
- fixed: #70 Can't install nuget because of reference to System.Linq.dll
v1.7.1
- fixed: #67 Equality comparison with nullables throws at delegate-invoke
v1.7.0
- added: #56 Add ExpressionInfo.TryCatch, Block and Throw
- fixed: #55 CompileFast crash with ref parameter
- fixed: #60 Support all types and operations from System.Numerics
Dependencies
-
.NETFramework 4.5
- No dependencies.
-
.NETStandard 1.3
- NETStandard.Library (>= 1.6.1)
- System.Reflection.Emit.Lightweight (>= 4.3.0)
Used By
NuGet packages (23)
Showing the top 5 NuGet packages that depend on FastExpressionCompiler:
Package | Downloads |
---|---|
Miruken
Miruken handles your application
|
|
ExpressionToCodeLib
Generates valid, readable C# from an expression tree, and can annotate that code with runtime values. Useful for e.g. code generation and unit testing assertions.
|
|
Dos.ORM
Dos.ORM(原Hxj.Data)于2009年发布、2015年正式开源,支持Core,该组件已在大量成熟项目中应用。初期开发过程中参考了NBear与MySoft,吸取了他们的一些精华,加入新思想,后期参考EF的Lambda语法进行大量扩展。官方网站:https://www.ITdos.com/Dos/ORM/Index.html,交流QQ群:60831381。
|
|
TestBase
*TestBase* gives you a flying start with
- fluent assertions that are easy to extend
- sharp error messages
- tools to help you test with “heavyweight” dependencies on
- AspNetCore.Mvc, AspNet.Mvc or WebApi Contexts
- HttpClient
- Ado.Net
- Streams & Logging
- Mix & match with your favourite test runners & assertions.
```
UnitUnderTest.Action()
.ShouldNotBeNull()
.ShouldEqualByValueExceptFor(new {Id=1, Descr=expected}, ignoreList )
.Payload
.ShouldMatchIgnoringCase("I expected this")
.Should(someOtherPredicate);
.Items
.ShouldAll(predicate)
.ShouldContain(item)
.ShouldNotContain(predicate)
.Where(predicate)
.SingleOrAssertFail()
.ShouldEqualByValue().ShouldEqualByValueExceptFor(...).ShouldEqualByValueOnMembers()
work with all kinds of object and collections, and report what differed.
string.ShouldMatch(pattern).ShouldNotMatch().ShouldBeEmpty().ShouldNotBeEmpty()
.ShouldNotBeNullOrEmptyOrWhiteSpace().ShouldEqualIgnoringCase()
.ShouldContain().ShouldStartWith().ShouldEndWith().ShouldBeContainedIn(), ...
numeric.ShouldBeBetween().ShouldEqualWithTolerance()....GreaterThan....LessThan...GreaterOrEqualTo ...
ienumerable.ShouldAll().ShouldContain().ShouldNotContain().ShouldBeEmpty().ShouldNotBeEmpty() ...
stream.ShouldHaveSameStreamContentAs().ShouldContain()
value.ShouldBe().ShouldNotBe().ShouldBeOfType().ShouldBeAssignableTo()...
```
TestBase.HttpClient.Fake
```
new FakeHttpClient()
.Setup(x=>x.RequestUri.PathAndQuery.StartsWith("/this"))
.Returns(response)
.Setup(x=>x.Method==HttpMethod.Put)
.Returns(new HttpResponseMessage(HttpStatusCode.Accepted));
```
TestBase.AdoNet
------------------
`FakeDbConnection`
```
- db.SetupForQuery(…)
- db.SetupForExecuteNonQuery(…)
- db.ShouldHaveUpdated("tableName", …)
- db.ShouldHaveSelected("tableName", …)
- db.ShouldHaveDeleted("tableName", …)
- db.Verify( x=>x.CommandText.Matches("Insert [case] .*")
&& x.Parameters["id"].Value==1 )
- db
.ShouldHaveInvoked(cmd => predicate(cmd))
.ShouldHaveParameter("name", value)
```
`RecordingDbConnection`
TestBase.Mvc.AspNetCore & TestBase.Mvc for Mvc 4 & Mvc 5
--------------------------------------------------------
```
ControllerUnderTest.WithControllerContext()
.Action()
.ShouldbeViewResult()
.ShouldHaveModel<TModel>()
.ShouldEqualByValue(expected)
ControllerUnderTest.Action()
.ShouldBeRedirectToRouteResult()
.ShouldHaveRouteValue("expectedKey", [Optional] "expectedValue");
ShouldHaveViewDataContaining(), ShouldBeJsonResult() etc.
```
- Test AspNetCore controllers with zero setup using
`controllerUnderTest.WithControllerContext(actionUnderTest)`
- Test more complex AspNetCore controller/application dependencies using
`HostedMvcTestFixtureBase` and specify your MVCApplications `Startup` class.
```
[TestCase("/dummy")]
public async Task Put_Should_ReturnA(string url)
{
var httpClient=GivenClientForRunningServer<Startup>();
GivenRequestHeaders(httpClient, "CustomHeader", "HeaderValue1");
var result = await httpClient.PutAsync(url, json);
result.ShouldBe_202Accepted();
}
```
For Mvc4 and Mvc 5, fake your http request & context, and use the `RegisterRoutes` method
of your actual application to set up `Controller.Url`
```
ControllerUnderTest
.WithHttpContextAndRoutes(
RouteConfig.RegisterRoutes,
"/incomingurl"
);
ApiControllerUnderTest.WithWebApiHttpContext<T>(
httpMethod,
requestUri,
routeTemplate)
```
Testable Logging
```
// Extensions.Logging.ListOfString
var log = new List<String>();
ILogger mslogger= new LoggerFactory().AddStringListLogger(log).CreateLogger("Test2");
// Serilog.Sinks.ListOfString
Serilog.Logger slogger= new LoggerConfiguration().WriteTo.StringList(log).CreateLogger();
```
|
|
RulesEngine
Rules Engine is a package for abstracting business logic/rules/policies out of the system. This works in a very simple way by giving you an ability to put your rules in a store outside the core logic of the system thus ensuring that any change in rules doesn't affect the core system.
|
GitHub repositories (4)
Showing the top 4 popular GitHub repositories that depend on FastExpressionCompiler:
Repository | Stars |
---|---|
MapsterMapper/Mapster
A fast, fun and stimulating object to object Mapper
|
|
microsoft/RulesEngine
A Json based Rules Engine with extensive Dynamic expression support
|
|
itdos/Dos.ORM
Dos.ORM于2009年发布、2015年正式开源,该组件已在数百个成熟项目中应用。初期开发过程中吸取了NBear与MySoft的一些精华并加入新思想,之后参考EF Lambda语法进行大量扩展。经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等。官方网站:https://www.itdos.com/dos/orm/Index.html 交流群:60831381
|
|
EamonNerbonne/ExpressionToCode
Generates valid, readable C# from an Expression Tree.
|
Version History
Version | Downloads | Last updated |
---|---|---|
3.0.0-preview-07 | 201 | 12/25/2020 |
3.0.0-preview-06 | 228 | 12/1/2020 |
3.0.0-preview-05 | 357 | 11/27/2020 |
3.0.0-preview-04 | 145 | 11/3/2020 |
3.0.0-preview-03 | 63 | 11/2/2020 |
3.0.0-preview-02 | 519 | 10/23/2020 |
3.0.0-preview-01 | 66 | 10/23/2020 |
2.0.0 | 162,635 | 1/25/2019 |
2.0.0-preview-03 | 898 | 11/9/2018 |
2.0.0-preview-02 | 664 | 10/25/2018 |
2.0.0-preview-01 | 408 | 10/24/2018 |
1.10.1 | 23,591 | 8/8/2018 |
1.10.0 | 476 | 8/3/2018 |
1.9.0 | 995 | 7/24/2018 |
1.8.0 | 17,193 | 6/24/2018 |
1.7.2 | 3,953 | 6/7/2018 |
1.7.1 | 11,332 | 3/27/2018 |
1.7.0 | 6,386 | 3/17/2018 |
1.6.0 | 14,181 | 12/3/2017 |
1.5.0 | 2,098 | 11/12/2017 |
1.4.0 | 6,713 | 9/9/2017 |
1.3.0 | 735 | 8/28/2017 |
1.2.2 | 1,037 | 8/8/2017 |
1.2.1 | 652 | 8/8/2017 |
1.2.0 | 642 | 8/8/2017 |
1.1.1 | 91,878 | 7/18/2017 |
1.1.0 | 586 | 7/13/2017 |
1.0.1 | 1,153 | 5/26/2017 |
1.0.0 | 1,136 | 4/2/2017 |
1.0.0-preview-04 | 600 | 3/31/2017 |
1.0.0-preview-03 | 876 | 3/30/2017 |
1.0.0-preview-02 | 585 | 3/29/2017 |
1.0.0-preview-01 | 679 | 3/23/2017 |