Correct package version installed

Dependency injection works
Project renaming
WIP replacement of services with CQRS
This commit is contained in:
Geoffroy BONNEVILLE
2020-03-24 17:31:34 +01:00
parent ba8bbe045b
commit f208e2d0b6
34 changed files with 310 additions and 124 deletions

View File

@@ -39,6 +39,7 @@
<None Include="project.json" />
</ItemGroup>
<ItemGroup>
<Compile Include="ApplicationModule.cs" />
<Compile Include="Common\Interfaces\ICryptographyClient.cs" />
<Compile Include="Common\Interfaces\IDatabaseProxy.cs" />
<Compile Include="Common\Interfaces\IFileProxy.cs" />
@@ -52,16 +53,18 @@
<Compile Include="Common\Interfaces\ISelectableModel.cs" />
<Compile Include="Common\Interfaces\ISettingsProxy.cs" />
<Compile Include="Common\Mappings\IMapFrom.cs" />
<Content Include="Common\Mappings\MappingProfile.cs" />
<Compile Include="Common\Mappings\MappingProfile.cs" />
<Compile Include="Common\Mappings\MappingProfiles.cs" />
<Compile Include="Database\Commands\CloseDatabase\CloseDatabaseCommand.cs" />
<Compile Include="Database\Commands\CreateDatabase\CreateDatabaseCommand.cs" />
<Compile Include="Database\Commands\SaveDatabase\SaveDatabaseCommand.cs" />
<Compile Include="Database\Models\DatabaseVm.cs" />
<Compile Include="Database\Models\MainVm.cs" />
<Compile Include="Database\Queries\GetDatabase\GetDatabaseQuery.cs" />
<Compile Include="Database\Queries\IsDatabaseOpen\IsDatabaseOpenQuery.cs" />
<Compile Include="Database\Queries\OpenDatabase\OpenDatabaseQuery.cs" />
<Compile Include="Database\Queries\OpenDatabase\OpenDatabaseQueryValidator.cs" />
<Compile Include="DependencyInjection.cs" />
<Compile Include="Entry\Models\EntryVm.cs" />
<Compile Include="Group\Models\GroupVm.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -88,9 +91,9 @@
<Folder Include="Settings\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ModernKeePass.Domain\ModernKeePass.Domain.csproj">
<ProjectReference Include="..\ModernKeePass.Domain\Domain.csproj">
<Project>{9a0759f1-9069-4841-99e3-3bec44e17356}</Project>
<Name>ModernKeePass.Domain</Name>
<Name>Domain</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

View File

@@ -0,0 +1,32 @@
using System.Reflection;
using Autofac;
using AutoMapper;
using MediatR;
using ModernKeePass.Application.Common.Mappings;
using Module = Autofac.Module;
namespace ModernKeePass.Application
{
public class ApplicationModule: Module
{
protected override void Load(ContainerBuilder builder)
{
// Register Automapper profiles
builder.RegisterType<MappingProfiles>().As<Profile>();
// Register Mediatr
builder
.RegisterType<Mediator>()
.As<IMediator>()
.InstancePerLifetimeScope();
// request & notification handlers
builder.Register<SingleInstanceFactory>(context =>
{
var c = context.Resolve<IComponentContext>();
return t => c.Resolve(t);
});
builder.RegisterAssemblyTypes(typeof(ApplicationModule).GetTypeInfo().Assembly).AsImplementedInterfaces();
}
}
}

View File

@@ -7,6 +7,7 @@ namespace ModernKeePass.Application.Common.Interfaces
public interface IDatabaseProxy
{
bool IsOpen { get; }
string Name { get; }
GroupEntity RecycleBin { get; set; }
BaseEntity Cipher { get; set; }
BaseEntity KeyDerivation { get; set; }

View File

@@ -2,7 +2,7 @@
{
public interface ISettingsProxy
{
T GetSetting<T>(string property, T defaultValue = default);
T GetSetting<T>(string property, T defaultValue = default(T));
void PutSetting<T>(string property, T value);
}
}

View File

@@ -9,20 +9,20 @@ namespace ModernKeePass.Application.Common.Mappings
{
public MappingProfile()
{
ApplyMappingsFromAssembly(Assembly.GetExecutingAssembly());
ApplyMappingsFromAssembly(typeof(MappingProfile).GetTypeInfo().Assembly);
}
private void ApplyMappingsFromAssembly(Assembly assembly)
{
var types = assembly.GetExportedTypes()
.Where(t => t.GetInterfaces().Any(i =>
i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IMapFrom<>)))
var types = assembly.ExportedTypes
.Where(t => t.GetTypeInfo().ImplementedInterfaces.Any(i =>
i.GetTypeInfo().IsGenericType && i.GetGenericTypeDefinition() == typeof(IMapFrom<>)))
.ToList();
foreach (var type in types)
{
var instance = Activator.CreateInstance(type);
var methodInfo = type.GetMethod("Mapping");
var methodInfo = type.GetTypeInfo().GetDeclaredMethod("Mapping");
methodInfo?.Invoke(instance, new object[] { this });
}
}

View File

@@ -1,5 +1,4 @@
using MediatR;
using System.Threading;
using System.Threading.Tasks;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Queries.IsDatabaseOpen;
@@ -9,7 +8,7 @@ namespace ModernKeePass.Application.Database.Commands.CloseDatabase
{
public class CloseDatabaseCommand: IRequest
{
public class CloseDatabaseCommandHandler : IRequestHandler<CloseDatabaseCommand>
public class CloseDatabaseCommandHandler : IAsyncRequestHandler<CloseDatabaseCommand>
{
private readonly IDatabaseProxy _database;
private readonly IMediator _mediator;
@@ -19,10 +18,9 @@ namespace ModernKeePass.Application.Database.Commands.CloseDatabase
_database = database;
_mediator = mediator;
}
public async Task Handle(CloseDatabaseCommand message, CancellationToken cancellationToken)
public async Task Handle(CloseDatabaseCommand message)
{
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery(), cancellationToken);
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery());
if (isDatabaseOpen) _database.CloseDatabase();
else throw new DatabaseClosedException();
}

View File

@@ -1,5 +1,4 @@
using MediatR;
using System.Threading;
using System.Threading.Tasks;
using AutoMapper;
using ModernKeePass.Application.Common.Interfaces;
@@ -16,7 +15,7 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase
public FileInfo FileInfo { get; set; }
public Credentials Credentials { get; set; }
public class CreateDatabaseCommandHandler : IRequestHandler<CreateDatabaseCommand, DatabaseVm>
public class CreateDatabaseCommandHandler : IAsyncRequestHandler<CreateDatabaseCommand, DatabaseVm>
{
private readonly IDatabaseProxy _database;
private readonly IMediator _mediator;
@@ -29,9 +28,9 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase
_mapper = mapper;
}
public async Task<DatabaseVm> Handle(CreateDatabaseCommand message, CancellationToken cancellationToken)
public async Task<DatabaseVm> Handle(CreateDatabaseCommand message)
{
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery(), cancellationToken);
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery());
if (isDatabaseOpen) throw new DatabaseOpenException();
var database = await _database.Create(message.FileInfo, message.Credentials);
@@ -43,6 +42,7 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase
};
return databaseVm;
}
}
}
}

View File

@@ -3,13 +3,16 @@ using System.Threading;
using System.Threading.Tasks;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Queries.IsDatabaseOpen;
using ModernKeePass.Domain.Dtos;
using ModernKeePass.Domain.Exceptions;
namespace ModernKeePass.Application.Database.Commands.SaveDatabase
{
public class SaveDatabaseCommand : IRequest
{
public class SaveDatabaseCommandHandler : IRequestHandler<SaveDatabaseCommand>
public FileInfo FileInfo { get; set; }
public class SaveDatabaseCommandHandler : IAsyncRequestHandler<SaveDatabaseCommand>
{
private readonly IDatabaseProxy _database;
private readonly IMediator _mediator;
@@ -20,10 +23,14 @@ namespace ModernKeePass.Application.Database.Commands.SaveDatabase
_mediator = mediator;
}
public async Task Handle(SaveDatabaseCommand message, CancellationToken cancellationToken)
public async Task Handle(SaveDatabaseCommand message)
{
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery(), cancellationToken);
if (isDatabaseOpen) await _database.SaveDatabase();
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery());
if (isDatabaseOpen)
{
if (message.FileInfo != null) await _database.SaveDatabase(message.FileInfo);
else await _database.SaveDatabase();
}
else throw new DatabaseClosedException();
}
}

View File

@@ -0,0 +1,29 @@
using MediatR;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Models;
namespace ModernKeePass.Application.Database.Queries.GetDatabase
{
public class GetDatabaseQuery: IRequest<DatabaseVm>
{
public class GetDatabaseQueryHandler : IRequestHandler<GetDatabaseQuery, DatabaseVm>
{
private readonly IDatabaseProxy _databaseProxy;
public GetDatabaseQueryHandler(IDatabaseProxy databaseProxy)
{
_databaseProxy = databaseProxy;
}
public DatabaseVm Handle(GetDatabaseQuery request)
{
var database = new DatabaseVm
{
IsOpen = _databaseProxy.IsOpen,
Name = _databaseProxy.Name
};
return database;
}
}
}
}

View File

@@ -1,6 +1,4 @@
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using MediatR;
using ModernKeePass.Application.Common.Interfaces;
namespace ModernKeePass.Application.Database.Queries.IsDatabaseOpen
@@ -15,10 +13,12 @@ namespace ModernKeePass.Application.Database.Queries.IsDatabaseOpen
{
_databaseProxy = databaseProxy;
}
public Task<bool> Handle(IsDatabaseOpenQuery request, CancellationToken cancellationToken)
public bool Handle(IsDatabaseOpenQuery message)
{
return Task.FromResult(_databaseProxy.IsOpen);
return _databaseProxy.IsOpen;
}
}
}
}

View File

@@ -16,7 +16,7 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase
public FileInfo FileInfo { get; set; }
public Credentials Credentials { get; set; }
public class OpenDatabaseQueryHandler : IRequestHandler<OpenDatabaseQuery, DatabaseVm>
public class OpenDatabaseQueryHandler : IAsyncRequestHandler<OpenDatabaseQuery, DatabaseVm>
{
private readonly IMapper _mapper;
private readonly IMediator _mediator;
@@ -29,9 +29,9 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase
_databaseProxy = databaseProxy;
}
public async Task<DatabaseVm> Handle(OpenDatabaseQuery request, CancellationToken cancellationToken)
public async Task<DatabaseVm> Handle(OpenDatabaseQuery request)
{
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery(), cancellationToken);
var isDatabaseOpen = await _mediator.Send(new IsDatabaseOpenQuery());
if (isDatabaseOpen) throw new DatabaseOpenException();
var database = await _databaseProxy.Open(request.FileInfo, request.Credentials);

View File

@@ -0,0 +1,21 @@
using System.Reflection;
using AutoMapper;
using FluentValidation;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
namespace ModernKeePass.Application
{
public static class DependencyInjection
{
public static IServiceCollection AddApplication(this IServiceCollection services)
{
var assembly = typeof(DependencyInjection).GetTypeInfo().Assembly;
services.AddAutoMapper(assembly);
services.AddMediatR(assembly);
//services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
return services;
}
}
}

View File

@@ -2,11 +2,15 @@
"supports": {},
"dependencies": {
"Autofac": "4.9.4",
"AutoMapper": "6.2.2",
"Autofac.Extensions.DependencyInjection": "4.4.0",
"AutoMapper": "6.1.1",
"AutoMapper.Extensions.Microsoft.DependencyInjection": "2.0.1",
"FluentValidation": "8.6.2",
"MediatR": "4.0.0",
"MediatR": "3.0.1",
"MediatR.Extensions.Microsoft.DependencyInjection": "2.0.0",
"Microsoft.Extensions.DependencyInjection": "1.1.1",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.1",
"NETStandard.Library": "2.0.3",
"Splat": "3.0.0"
},
"frameworks": {