Skip to content
This repository was archived by the owner on May 7, 2020. It is now read-only.

Commit

Permalink
Merge pull request #46 from stoveproject/dev
Browse files Browse the repository at this point in the history
dev to master
  • Loading branch information
osoykan authored Jul 14, 2017
2 parents e99826e + 47da7b9 commit 77c236a
Show file tree
Hide file tree
Showing 37 changed files with 505 additions and 558 deletions.
34 changes: 4 additions & 30 deletions build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ var testProjectNames = new List<string>()
"Stove.RavenDB.Tests",
"Stove.Redis.Tests",
"Stove.Tests",
"Stove.Tests.SampleApplication"
//"Stove.Dapper.Tests",
//"Stove.Hangfire.Tests",
//"Stove.NHibernate.Tests",
"Stove.Tests.SampleApplication",
"Stove.Dapper.Tests",
"Stove.Hangfire.Tests",
"Stove.NHibernate.Tests"
};

var nupkgPath = "nupkg";
Expand Down Expand Up @@ -104,39 +104,13 @@ Task("Coverage")
.Does(()=>
{
Information("Coverage...");
/*var coverSettings = new DotCoverCoverSettings()
.WithFilter("-:*Tests");
var coverageResultSsV4 = new FilePath("./dotcover/dotcoverSsV4.data");
DotCoverCover(ctx =>
ctx.XUnit2("./SsV4Test/NodaTime.Serialization.ServiceStackText.UnitTests.dll"),
coverageResultSsV4,
coverSettings
);
var htmlReportFile = new FilePath("./dotcover/dotcover.html");
var reportSettings = new DotCoverReportSettings { ReportType = DotCoverReportType.HTML};
DotCoverReport(mergedData, htmlReportFile, reportSettings);
StartProcess("powershell", "start file:///" + MakeAbsolute(htmlReportFile));*/
});

Task("Analyse")
.IsDependentOn("Coverage")
.Does(()=>
{
Information("Sonar running!...");
/*var settings = new SonarBeginSettings()
{
Url = sonarQubeServerUrl,
Key = sonarQubeKey
};
Sonar(
ctx => {
ctx.MSBuild(solution);
}, settings
);*/
});

Task("Pack")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public Expression<Func<TEntity, bool>> ExecuteFilter<TEntity, TPrimaryKey>(Expre

private bool IsFilterable<TEntity, TPrimaryKey>() where TEntity : class, IEntity<TPrimaryKey>
{
return typeof(TEntity).IsInheritsOrImplements(typeof(ISoftDelete)) && IsEnabled;
return typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)) && IsEnabled;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,12 @@ public override IEnumerable<TAny> Query<TAny>(string query, object parameters =
return Connection.Query<TAny>(query, parameters, ActiveTransaction);
}

public override void Execute(string query, object parameters = null)
public override int Execute(string query, object parameters = null)
{
Connection.Execute(query, parameters, ActiveTransaction);
return Connection.Execute(query, parameters, ActiveTransaction);
}

public override Task ExecuteAsync(string query, object parameters = null)
public override Task<int> ExecuteAsync(string query, object parameters = null)
{
return Connection.ExecuteAsync(query, parameters, ActiveTransaction);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,14 +222,14 @@ public interface IDapperRepository<TEntity, TPrimaryKey> : IRepository where TEn
/// </summary>
/// <param name="query">The query.</param>
/// <param name="parameters">The parameters.</param>
void Execute([NotNull] string query, object parameters = null);
int Execute([NotNull] string query, object parameters = null);

/// <summary>
/// Executes the specified query.
/// </summary>
/// <param name="query">The query.</param>
/// <param name="parameters">The parameters.</param>
Task ExecuteAsync([NotNull] string query, object parameters = null);
Task<int> ExecuteAsync([NotNull] string query, object parameters = null);

/// <summary>
/// Queries the specified query.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,11 @@ public virtual Task<IEnumerable<TEntity>> QueryAsync(string query, object parame

public abstract IEnumerable<TAny> Query<TAny>(string query, object parameters = null) where TAny : class;

public abstract void Execute(string query, object parameters = null);
public abstract int Execute(string query, object parameters = null);

public virtual Task ExecuteAsync(string query, object parameters = null)
public virtual Task<int> ExecuteAsync(string query, object parameters = null)
{
Execute(query, parameters);
return Task.FromResult(0);
return Task.FromResult(Execute(query, parameters));
}

public virtual Task<IEnumerable<TAny>> QueryAsync<TAny>(string query, object parameters = null) where TAny : class
Expand Down
93 changes: 48 additions & 45 deletions src/Stove.Dapper/StoveDapperRegistrationExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Reflection;

using Autofac;
using Autofac.Extras.IocManager;

using JetBrains.Annotations;
Expand All @@ -11,49 +12,51 @@

namespace Stove
{
public static class StoveDapperRegistrationExtensions
{
/// <summary>
/// Dapper Integration for Stove, registers and arrange all Dapper structure to Ioc Container.
/// It should be called in composition root to use correctly.
/// </summary>
/// <param name="builder">The builder.</param>
/// <returns></returns>
[NotNull]
public static IIocBuilder UseStoveDapper([NotNull] this IIocBuilder builder)
{
builder.RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()));

AutoRegisterRepositories(builder);

return builder;
}

private static void AutoRegisterRepositories(IIocBuilder builder)
{
builder.RegisterServices(r => r.UseBuilder(cb =>
{
if (!cb.Properties.ContainsKey(StoveConsts.OrmRegistrarContextKey))
{
throw new StoveInitializationException("Dapper registration should be after EntityFramework or NHibernate registration" +
" use StoveEntityFramework() or StoveNHibernate() registration methods before use StoveDapper().");
}

var ormRegistrars = cb.Properties[StoveConsts.OrmRegistrarContextKey].As<IList<ISecondaryOrmRegistrar>>();

ormRegistrars.ForEach(registrar =>
{
switch (registrar.OrmContextKey)
{
case StoveConsts.Orms.EntityFramework:
registrar.RegisterRepositories(EfBasedDapperAutoRepositoryTypes.Default);
break;
case StoveConsts.Orms.NHibernate:
registrar.RegisterRepositories(NhBasedDapperAutoRepositoryTypes.Default);
break;
}
});
}));
}
}
public static class StoveDapperRegistrationExtensions
{
/// <summary>
/// Dapper Integration for Stove, registers and arrange all Dapper structure to Ioc Container.
/// It should be called in composition root to use correctly.
/// </summary>
/// <param name="builder">The builder.</param>
/// <returns></returns>
[NotNull]
public static IIocBuilder UseStoveDapper([NotNull] this IIocBuilder builder)
{
builder.RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()));

AutoRegisterRepositories(builder);

return builder;
}

private static void AutoRegisterRepositories(IIocBuilder builder)
{
builder.RegisterServices(r => r.UseBuilder(cb => { r.BeforeRegistrationCompleted += (sender, args) => { LastChanceRegistration(cb); }; }));
}

private static void LastChanceRegistration(ContainerBuilder cb)
{
if (!cb.Properties.ContainsKey(StoveConsts.OrmRegistrarContextKey))
{
throw new StoveInitializationException("Dapper registration should be after EntityFramework or NHibernate registration" +
" use StoveEntityFramework() or StoveNHibernate() registration methods before use StoveDapper().");
}

var ormRegistrars = cb.Properties[StoveConsts.OrmRegistrarContextKey].As<IList<ISecondaryOrmRegistrar>>();

ormRegistrars.ForEach(registrar =>
{
switch (registrar.OrmContextKey)
{
case StoveConsts.Orms.EntityFramework:
registrar.RegisterRepositories(EfBasedDapperAutoRepositoryTypes.Default);
break;
case StoveConsts.Orms.NHibernate:
registrar.RegisterRepositories(NhBasedDapperAutoRepositoryTypes.Default);
break;
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void RegisterRepositories(AutoRepositoryTypesAttribute defaultRepositoryT
? autoRepositoryAttr.RepositoryImplementation.MakeGenericType(entityTypeInfo.EntityType)
: autoRepositoryAttr.RepositoryImplementation.MakeGenericType(entityTypeInfo.DeclaringType, entityTypeInfo.EntityType);

_iocBuilder.RegisterServices(r => r.UseBuilder(cb => cb.RegisterType(implType).As(genericRepositoryType).AsImplementedInterfaces().WithPropertyInjection()));
_iocBuilder.RegisterServices(r => r.Register(genericRepositoryType, implType));
}
else
{
Expand All @@ -55,7 +55,7 @@ public void RegisterRepositories(AutoRepositoryTypesAttribute defaultRepositoryT
? autoRepositoryAttr.RepositoryImplementationWithPrimaryKey.MakeGenericType(entityTypeInfo.EntityType, primaryKeyType)
: autoRepositoryAttr.RepositoryImplementationWithPrimaryKey.MakeGenericType(entityTypeInfo.DeclaringType, entityTypeInfo.EntityType, primaryKeyType);

_iocBuilder.RegisterServices(r => r.UseBuilder(cb => cb.RegisterType(implType).As(genericRepositoryTypeWithPrimaryKey).AsImplementedInterfaces().WithPropertyInjection()));
_iocBuilder.RegisterServices(r => r.Register(genericRepositoryTypeWithPrimaryKey, implType));
}
}
}
Expand Down
33 changes: 16 additions & 17 deletions src/Stove.EntityFramework/StoveEntityFrameworkBootstrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,25 @@

using Stove.Bootstrapping;
using Stove.EntityFramework;
using Stove.Reflection.Extensions;

namespace Stove
{
[DependsOn(
typeof(StoveKernelBootstrapper)
)]
public class StoveEntityFrameworkBootstrapper : StoveBootstrapper
{
private readonly IDbContextTypeMatcher _dbContextTypeMatcher;
[DependsOn(
typeof(StoveKernelBootstrapper)
)]
public class StoveEntityFrameworkBootstrapper : StoveBootstrapper
{
private readonly IDbContextTypeMatcher _dbContextTypeMatcher;

public StoveEntityFrameworkBootstrapper(IDbContextTypeMatcher dbContextTypeMatcher)
{
_dbContextTypeMatcher = dbContextTypeMatcher;
}
public StoveEntityFrameworkBootstrapper(IDbContextTypeMatcher dbContextTypeMatcher)
{
_dbContextTypeMatcher = dbContextTypeMatcher;
}

public override void Start()
{
Type[] dbContextTypes = typeof(StoveDbContext).AssignedTypes().ToArray();
_dbContextTypeMatcher.Populate(dbContextTypes);
}
}
public override void Start()
{
Type[] dbContextTypes = Resolver.GetRegisteredServices().Where(x => typeof(StoveDbContext).IsAssignableFrom(x)).ToArray();
_dbContextTypeMatcher.Populate(dbContextTypes);
}
}
}
Loading

0 comments on commit 77c236a

Please sign in to comment.