mirror of https://github.com/abpframework/abp.git
17 changed files with 303 additions and 30 deletions
@ -1,15 +1,34 @@ |
|||||
namespace Volo.Abp.Modularity |
namespace Volo.Abp.Modularity |
||||
{ |
{ |
||||
public class DefaultModuleLifecycleContributer : ModuleLifecycleContributerBase |
public class OnApplicationInitializationModuleLifecycleContributer : ModuleLifecycleContributerBase |
||||
{ |
{ |
||||
public override void Initialize(ApplicationInitializationContext context, IAbpModule module) |
public override void Initialize(ApplicationInitializationContext context, IAbpModule module) |
||||
{ |
{ |
||||
(module as IOnApplicationInitialization)?.OnApplicationInitialization(context); |
(module as IOnApplicationInitialization)?.OnApplicationInitialization(context); |
||||
} |
} |
||||
|
} |
||||
|
|
||||
|
public class OnApplicationShutdownModuleLifecycleContributer : ModuleLifecycleContributerBase |
||||
|
{ |
||||
public override void Shutdown(ApplicationShutdownContext context, IAbpModule module) |
public override void Shutdown(ApplicationShutdownContext context, IAbpModule module) |
||||
{ |
{ |
||||
(module as IOnApplicationShutdown)?.OnApplicationShutdown(context); |
(module as IOnApplicationShutdown)?.OnApplicationShutdown(context); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
|
public class OnPreApplicationInitializationModuleLifecycleContributer : ModuleLifecycleContributerBase |
||||
|
{ |
||||
|
public override void Initialize(ApplicationInitializationContext context, IAbpModule module) |
||||
|
{ |
||||
|
(module as IOnPreApplicationInitialization)?.OnPreApplicationInitialization(context); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public class OnPostApplicationInitializationModuleLifecycleContributer : ModuleLifecycleContributerBase |
||||
|
{ |
||||
|
public override void Initialize(ApplicationInitializationContext context, IAbpModule module) |
||||
|
{ |
||||
|
(module as IOnPostApplicationInitialization)?.OnPostApplicationInitialization(context); |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
using JetBrains.Annotations; |
||||
|
|
||||
|
namespace Volo.Abp.Modularity |
||||
|
{ |
||||
|
public interface IOnPostApplicationInitialization |
||||
|
{ |
||||
|
void OnPostApplicationInitialization([NotNull] ApplicationInitializationContext context); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
using JetBrains.Annotations; |
||||
|
|
||||
|
namespace Volo.Abp.Modularity |
||||
|
{ |
||||
|
public interface IOnPreApplicationInitialization |
||||
|
{ |
||||
|
void OnPreApplicationInitialization([NotNull] ApplicationInitializationContext context); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
using Volo.Abp.Collections; |
||||
|
|
||||
|
namespace Volo.Abp.Modularity |
||||
|
{ |
||||
|
public class ModuleLifecycleOptions |
||||
|
{ |
||||
|
public ITypeList<IModuleLifecycleContributer> Contributers { get; } |
||||
|
|
||||
|
public ModuleLifecycleOptions() |
||||
|
{ |
||||
|
Contributers = new TypeList<IModuleLifecycleContributer>(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,30 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netcoreapp2.0</TargetFramework> |
||||
|
<AssemblyName>Volo.Abp.EntityFrameworkCore.Tests</AssemblyName> |
||||
|
<PackageId>Volo.Abp.EntityFrameworkCore.Tests</PackageId> |
||||
|
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
||||
|
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
||||
|
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
||||
|
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
||||
|
<RootNamespace /> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" /> |
||||
|
<ProjectReference Include="..\..\src\Volo.Abp.EntityFrameworkCore\Volo.Abp.EntityFrameworkCore.csproj" /> |
||||
|
<ProjectReference Include="..\AbpTestBase\AbpTestBase.csproj" /> |
||||
|
<ProjectReference Include="..\Volo.Abp.TestApp\Volo.Abp.TestApp.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" /> |
||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.0.0" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<Folder Include="Volo\Abp\TestApp\EntityFrameworkCore\" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,42 @@ |
|||||
|
using Microsoft.Data.Sqlite; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.Autofac; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.TestApp; |
||||
|
using Volo.Abp.TestApp.EntityFrameworkCore; |
||||
|
|
||||
|
namespace Volo.Abp.EntityFrameworkCore |
||||
|
{ |
||||
|
[DependsOn(typeof(AbpEntityFrameworkCoreModule))] |
||||
|
[DependsOn(typeof(TestAppModule))] |
||||
|
[DependsOn(typeof(AbpAutofacModule))] |
||||
|
public class AbpEntityFrameworkCoreTestModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddAssemblyOf<AbpEntityFrameworkCoreTestModule>(); |
||||
|
|
||||
|
services.AddAbpDbContext<TestAppDbContext>(options => |
||||
|
{ |
||||
|
options.WithDefaultRepositories(); |
||||
|
}); |
||||
|
|
||||
|
var inMemorySqlite = new SqliteConnection("Data Source=:memory:"); |
||||
|
inMemorySqlite.Open(); |
||||
|
|
||||
|
services.Configure<AbpDbContextOptions>(options => |
||||
|
{ |
||||
|
options.Configure(context => |
||||
|
{ |
||||
|
context.DbContextOptions.UseSqlite(inMemorySqlite); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public override void OnPreApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
context.ServiceProvider.GetRequiredService<TestAppDbContext>().Database.EnsureCreated(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
using Volo.Abp.TestBase; |
||||
|
|
||||
|
namespace Volo.Abp.EntityFrameworkCore |
||||
|
{ |
||||
|
public abstract class EntityFrameworkCoreTestBase : AbpIntegratedTest<AbpEntityFrameworkCoreTestModule> |
||||
|
{ |
||||
|
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) |
||||
|
{ |
||||
|
options.UseAutofac(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,38 @@ |
|||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Shouldly; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.TestApp.Domain; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Volo.Abp.EntityFrameworkCore.Repositories |
||||
|
{ |
||||
|
public class Basic_Repository_Tests : EntityFrameworkCoreTestBase |
||||
|
{ |
||||
|
private readonly IRepository<Person> _personRepository; |
||||
|
|
||||
|
public Basic_Repository_Tests() |
||||
|
{ |
||||
|
_personRepository = ServiceProvider.GetRequiredService<IRepository<Person>>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void GetList() |
||||
|
{ |
||||
|
_personRepository.GetList().Any().ShouldBeTrue(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task InsertAsync() |
||||
|
{ |
||||
|
var personId = Guid.NewGuid(); |
||||
|
|
||||
|
await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); |
||||
|
|
||||
|
var person = await _personRepository.FindAsync(personId); |
||||
|
person.ShouldNotBeNull(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Shouldly; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.TestApp.Domain; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Volo.Abp.EntityFrameworkCore |
||||
|
{ |
||||
|
public class Transaction_Tests : EntityFrameworkCoreTestBase |
||||
|
{ |
||||
|
private readonly IRepository<Person> _personRepository; |
||||
|
|
||||
|
public Transaction_Tests() |
||||
|
{ |
||||
|
_personRepository = ServiceProvider.GetRequiredService<IRepository<Person>>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_Rollback_Transaction_When_An_Exception_Is_Thrown() |
||||
|
{ |
||||
|
var personId = Guid.NewGuid(); |
||||
|
const string exceptionMessage = "thrown to rollback the transaction!"; |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
await WithUnitOfWorkAsync(async () => |
||||
|
{ |
||||
|
await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); |
||||
|
throw new Exception(exceptionMessage); |
||||
|
}); |
||||
|
} |
||||
|
catch (Exception e) when(e.Message == exceptionMessage) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
var person = await _personRepository.FindAsync(personId); |
||||
|
person.ShouldBeNull(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.TestApp.Domain; |
||||
|
|
||||
|
namespace Volo.Abp.TestApp.EntityFrameworkCore |
||||
|
{ |
||||
|
public class TestAppDbContext : AbpDbContext<TestAppDbContext> |
||||
|
{ |
||||
|
public DbSet<Person> People { get; set; } |
||||
|
|
||||
|
public TestAppDbContext(DbContextOptions<TestAppDbContext> options) |
||||
|
: base(options) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue