mirror of https://github.com/abpframework/abp.git
13 changed files with 133 additions and 10 deletions
@ -1,10 +1,10 @@ |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.Domain.Entities; |
|||
|
|||
namespace Volo.Abp.Domain.Repositories.MemoryDb |
|||
{ |
|||
public interface IMemoryDatabase |
|||
{ |
|||
List<TEntity> Collection<TEntity>(); |
|||
IMemoryDatabaseCollection<TEntity> Collection<TEntity>() where TEntity : class, IEntity; |
|||
|
|||
TKey GenerateNextId<TEntity, TKey>(); |
|||
} |
|||
|
|||
@ -0,0 +1,15 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Domain.Repositories.MemoryDb |
|||
{ |
|||
public interface IMemoryDatabaseCollection<TEntity> : IEnumerable<TEntity> |
|||
{ |
|||
void Add(TEntity entity); |
|||
|
|||
void Update(TEntity entity); |
|||
|
|||
void Remove(TEntity entity); |
|||
|
|||
bool Contains(TEntity entity); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
namespace Volo.Abp.Domain.Repositories.MemoryDb |
|||
{ |
|||
public interface IMemoryDbSerializer |
|||
{ |
|||
object Serialize(object obj); |
|||
|
|||
object Deserialize(object obj); |
|||
} |
|||
} |
|||
@ -0,0 +1,61 @@ |
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.Domain.Entities; |
|||
|
|||
namespace Volo.Abp.Domain.Repositories.MemoryDb |
|||
{ |
|||
public class MemoryDatabaseCollection<TEntity> : IMemoryDatabaseCollection<TEntity> |
|||
where TEntity : class, IEntity |
|||
{ |
|||
private readonly Dictionary<string, object> _dictionary = new Dictionary<string, object>(); |
|||
|
|||
private readonly IMemoryDbSerializer _memoryDbSerializer; |
|||
|
|||
public MemoryDatabaseCollection(IMemoryDbSerializer memoryDbSerializer) |
|||
{ |
|||
_memoryDbSerializer = memoryDbSerializer; |
|||
} |
|||
|
|||
public IEnumerator<TEntity> GetEnumerator() |
|||
{ |
|||
foreach (var entity in _dictionary.Values) |
|||
{ |
|||
yield return _memoryDbSerializer.Deserialize(entity).As<TEntity>(); |
|||
} |
|||
} |
|||
|
|||
IEnumerator IEnumerable.GetEnumerator() |
|||
{ |
|||
return GetEnumerator(); |
|||
} |
|||
|
|||
public void Add(TEntity entity) |
|||
{ |
|||
_dictionary.Add(GetEntityKey(entity), _memoryDbSerializer.Serialize(entity)); |
|||
} |
|||
|
|||
public void Update(TEntity entity) |
|||
{ |
|||
if (_dictionary.ContainsKey(GetEntityKey(entity))) |
|||
{ |
|||
_dictionary[GetEntityKey(entity)] = _memoryDbSerializer.Serialize(entity); |
|||
} |
|||
} |
|||
|
|||
public void Remove(TEntity entity) |
|||
{ |
|||
_dictionary.Remove(GetEntityKey(entity)); |
|||
} |
|||
|
|||
public bool Contains(TEntity entity) |
|||
{ |
|||
return _dictionary.ContainsKey(GetEntityKey(entity)); |
|||
} |
|||
|
|||
private string GetEntityKey(TEntity entity) |
|||
{ |
|||
return entity.GetKeys().JoinAsString(","); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
using System.IO; |
|||
using System.Runtime.Serialization.Formatters.Binary; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.Abp.Domain.Repositories.MemoryDb |
|||
{ |
|||
public class MemoryDbBinarySerializer : IMemoryDbSerializer, ITransientDependency |
|||
{ |
|||
public object Serialize(object obj) |
|||
{ |
|||
var stream = new MemoryStream(); |
|||
var formatter = new BinaryFormatter(); |
|||
formatter.Serialize(stream, obj); |
|||
return stream; |
|||
} |
|||
|
|||
public object Deserialize(object obj) |
|||
{ |
|||
if (!(obj is MemoryStream stream)) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
var formatter = new BinaryFormatter(); |
|||
stream.Seek(0, SeekOrigin.Begin); |
|||
return formatter.Deserialize(stream); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue