Merge pull request #2 from nutrija/master

Missing dependency
Minor security change.

Since types are strongly enforced now, IUserRoles should inherit from aggregate root.
Since implements is used, this means that repository will implement IUserRoles and thus it must implement IAggregateRoot.

TODO: fix object disposed problem with broken connections.
Can't access state on disposed connection
Enable compatibility with old api.

Remove namespace to enable serialization compatibility.
Disabled caching services by default.

There are couple of issues with current caching services so let's disable them for now.
1) cache invalidation should be done on transaction commit
2) support for multiple concurrent DB access from caching services - currently concurrent access is blocked by lock in DB API.
Improved Postgres LINQ support.

Added support for HashSet.Overlaps -> this is represented as && operator in Postgres.
Currently it works only on primitives.
ToSet helper methods for common conversion from collection to set.
This makes it possible to use
calculated Set<int> field from 'it => expression.ToSet()';
from DSL.

Support for substring. Postgres substr is 1-index based so appropriate conversion is required.

Added todos for later fixes.
Postgres driver is throwing exception on connection.State if it's disposed.
Investigate if driver needs fixing or should Revenj check for it.
Async notifications from DB lags and can be invoked after container is disposed.
While in practice this is not an issue since that means application is shutting down, in causes Heisenbugs in tests.
Check if there is some convenient way to stop notifications, such as Disposing stream on Dispose handler.

Mono actually works, but only after removing Mono.Security dll since that an ancient version which is missing some ctors.

TODO: investigate overlaps with domain objects, since Postgres currently doesn't like them - don't know how to compare them
TODO: fix PG driver State issues
TODO: fix DB notification issue (this affects both Postgres and Oracle)
TODO: improve notification signature - add specialized signature instead of using KeyValuePair for it
New Postgres driver.

Fix for State check. Postgres driver was throwin exception for disposed connections when accessing state.
Mono update. Previous version of Mono didn't work on Linux. This one should.

TODO: test if now Mono version works without removing Mono.Security
Number counters minor changes.

Counters are used to create temporary unique simple identifier
(as convenience, not requirement - thus no locking guards).
Since this can be used on various objects, rename EntityKeys -> NumberCounter
Reusable wcf authorization.

Standard authorization policy is usualy tweaked just a little.
Mark critical part of it as virtual, so it can be reused in other projects.
Added SignalR for Mono.

Fixed bug with TemplateMatch in Mono.
Merge pull request #4 from rpetrano/signalr_mono

Added SignalR for Mono.

Mono's UriTemplateMatch implementation has a bug: wildcard parameters get matched with an '/' at the beginning. For example:

var fullUri = new Uri("http://localhost:8999/Crud.svc/Client.ClientSession/d83049ff-d8b8-4138-861d-e4d45ad5e835");
var template = new UriTemplate("/Crud.svc/{domainObject}/{*uri}");
When you match those two, you get uri == "/d83049ff-d8b8-4138-861d-e4d45ad5e835".

This is a simple workaround. However it won't work in this example:

var fullUri = new Uri("http://localhost:8999/Crud.svc/Client.ClientSession?uri=/d83049ff-d8b8-4138-861d-e4d45ad5e835");
var template = new UriTemplate("/Crud.svc/{domainObject}?uri={uri}");
Now URI doesn't have a starting '/' because the workaround deleted it. Since you said that most URI's starts with an '/' I should delete it.
Strong name removal from plugins.

Plugins should not be referenced from any project, only among themselves.
Since latest version of plugin is always preferrable and they are xcopied instead of placed into GAC,
strong naming should be removed.

Removed references to rest cache project - this currently causes problems in Mono since not all dlls are copied to output path.

TODO: add script in Monodevelop for copying plugins dll to output path.
Removed unneeded references.
Merge pull request #5 from rpetrano/build_script

Removed unneeded references.
Revenj.Core project.

For using Revenj as standalone library (inside ASP.NET MVC for example),
only few dependencies are required.

Provide Revenj.Core.dll as entry point with requirements for additional dependencies (such as database persistence plugins.

Plugins configuration extended with assemblies property.
By default instead of scaning folder, use only core libraries available in App domain as plugins.
While this is not ideal for extensibility, if one wishes to use all kind of libraries, it can use Revenj server projects,
or change the code.
This is mostly zero configuration entry point.
Merge branch 'master' of git@github.com:ngs-doo/revenj.git

Conflicts:
	Code/Server/Revenj.Http/Revenj.Http.Mono.csproj
Service locator improvements.

Removed additional arguments from resolve api.
If someone whishes to use them, he can use IObjectFactory directly anyway.
Provide service locator under IServiceProvider interface.
This removes dependency from Revenj if required for external code.
Changed resolution to use first public constructor instead of matching a single constructor for reflection construction.
IServiceProvider returns null when component can't be created.
Improved like comparison.

Since %, _ and \ are special characters in LIKE comparison, they must be escaped.
Escape provided argument in memory, or send REPLACE command to the database.

Added missing Oracle string.Compare and various string methods.

TODO: Oracle still behaves differently from .NET due to NULL and "" being same thing.
Special paths for this behavior are required.
TODO: Postgres can use = and <> on few places istead of LIKE comparison.
Postgres LINQ byte[].Length fix.

Special method must be used in Postgres to calculate length of bytea: octet_length
Redirect array size shortcut to detect such use case.
Add member to common members (currently is not called since array size takes precedence).

TODO: investigate behavior in Oracle
Added duration to requests.

Duration in milliseconds added to processing result.
X-Duration header added to web requests.
Since most of rest commands are doing serialization and deserialization outside of processing engine,
timing doesn't cover full duration, but only most of it.
Autofac updated.

Previous version of Autofac didn't handle well high concurrency situations due to broken circular dependency detection.
Removed circular dependency detection, but fixed concurrency issues.

Since current components are correctly registered, circular dependency can only occur if new components are registered.
It will manifest in stack overflow error, so there is not much difference from application perspective - it will fail in both scenarios.