Commit e4a9da1e authored by 阿星Plus's avatar 阿星Plus

bug fixed

parent a5a3bf6e
using Microsoft.EntityFrameworkCore;
using Plus.Dependency;
using Plus.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Plus.EntityFramework.Linq
{
public class EfCoreAsyncQueryableExecuter : IAsyncQueryableExecuter, ISingletonDependency
{
public Task<int> CountAsync<T>(IQueryable<T> queryable)
{
return EntityFrameworkQueryableExtensions.CountAsync<T>(queryable, default);
}
public Task<List<T>> ToListAsync<T>(IQueryable<T> queryable)
{
return EntityFrameworkQueryableExtensions.ToListAsync<T>(queryable, default);
}
public Task<T> FirstOrDefaultAsync<T>(IQueryable<T> queryable)
{
return EntityFrameworkQueryableExtensions.FirstOrDefaultAsync<T>(queryable, default);
}
}
}
\ No newline at end of file
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<PackageLicenseUrl>https://raw.githubusercontent.com/Meowv/.netcoreplus/master/LICENSE</PackageLicenseUrl> <PackageLicenseUrl>https://raw.githubusercontent.com/Meowv/.netcoreplus/master/LICENSE</PackageLicenseUrl>
<PackageTags>plus;plus.entityframework;.netcoreplus;</PackageTags> <PackageTags>plus;plus.entityframework;.netcoreplus;</PackageTags>
<PackageReleaseNotes>Plus.EntityFramework</PackageReleaseNotes> <PackageReleaseNotes>Plus.EntityFramework</PackageReleaseNotes>
<Version>1.0.0.1</Version> <Version>1.0.0.2</Version>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
{ {
public string GetDefaultNameOrConnectionString() public string GetDefaultNameOrConnectionString()
{ {
return Config["DefaultNameOrConnectionString"] ?? ""; return Config["DefaultNameOrConnectionString"];
} }
} }
} }
\ No newline at end of file
...@@ -24,7 +24,7 @@ namespace Plus.Configuration ...@@ -24,7 +24,7 @@ namespace Plus.Configuration
public T Get<T>(string name) public T Get<T>(string name)
{ {
object obj = this[name]; object obj = this[name];
return (obj == null) ? default(T) : ((T)Convert.ChangeType(obj, typeof(T))); return (obj == null) ? default : ((T)Convert.ChangeType(obj, typeof(T)));
} }
public void Set<T>(string name, T value) public void Set<T>(string name, T value)
......
using Castle.DynamicProxy; using Castle.DynamicProxy;
using Castle.MicroKernel.Registration; using Castle.MicroKernel.Registration;
using Plus.Event;
using System.Reflection; using System.Reflection;
namespace Plus.Dependency namespace Plus.Dependency
...@@ -42,6 +43,16 @@ namespace Plus.Dependency ...@@ -42,6 +43,16 @@ namespace Plus.Dependency
.WithService.Self() .WithService.Self()
.LifestyleTransient() .LifestyleTransient()
); );
//IConsumer
context.IocManager.IocContainer.Register(
Classes.FromAssembly(context.Assembly)
.IncludeNonPublicTypes()
.BasedOn(typeof(IConsumer<>))
.If(type => !type.GetTypeInfo().IsGenericTypeDefinition)
.WithService.Self()
.LifestyleTransient()
);
} }
} }
} }
\ No newline at end of file
using Plus.Dependency;
using Plus.Domain.Uow;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Plus.Event.Bus.Entities
{
public class EntityChangeEventHelper : ITransientDependency, IEntityChangeEventHelper
{
private readonly IUnitOfWorkManager _unitOfWorkManager;
public IEventBus EventBus
{
get;
set;
}
public EntityChangeEventHelper(IUnitOfWorkManager unitOfWorkManager)
{
_unitOfWorkManager = unitOfWorkManager;
EventBus = NullEventBus.Instance;
}
public virtual void TriggerEvents(EntityChangeReport changeReport)
{
TriggerEventsInternal(changeReport);
if (!changeReport.IsEmpty() && _unitOfWorkManager.Current != null)
{
_unitOfWorkManager.Current.SaveChanges();
}
}
public Task TriggerEventsAsync(EntityChangeReport changeReport)
{
TriggerEventsInternal(changeReport);
if (changeReport.IsEmpty() || _unitOfWorkManager.Current == null)
{
return Task.FromResult(0);
}
return _unitOfWorkManager.Current.SaveChangesAsync();
}
public virtual void TriggerEntityCreatingEvent(object entity)
{
TriggerEventWithEntity(typeof(EntityCreatingEventData<>), entity, triggerInCurrentUnitOfWork: true);
}
public virtual void TriggerEntityCreatedEventOnUowCompleted(object entity)
{
TriggerEventWithEntity(typeof(EntityCreatedEventData<>), entity, triggerInCurrentUnitOfWork: false);
}
public virtual void TriggerEntityUpdatingEvent(object entity)
{
TriggerEventWithEntity(typeof(EntityUpdatingEventData<>), entity, triggerInCurrentUnitOfWork: true);
}
public virtual void TriggerEntityUpdatedEventOnUowCompleted(object entity)
{
TriggerEventWithEntity(typeof(EntityUpdatedEventData<>), entity, triggerInCurrentUnitOfWork: false);
}
public virtual void TriggerEntityDeletingEvent(object entity)
{
TriggerEventWithEntity(typeof(EntityDeletingEventData<>), entity, triggerInCurrentUnitOfWork: true);
}
public virtual void TriggerEntityDeletedEventOnUowCompleted(object entity)
{
TriggerEventWithEntity(typeof(EntityDeletedEventData<>), entity, triggerInCurrentUnitOfWork: false);
}
public virtual void TriggerEventsInternal(EntityChangeReport changeReport)
{
TriggerEntityChangeEvents(changeReport.ChangedEntities);
TriggerDomainEvents(changeReport.DomainEvents);
}
protected virtual void TriggerEntityChangeEvents(List<EntityChangeEntry> changedEntities)
{
foreach (EntityChangeEntry changedEntity in changedEntities)
{
switch (changedEntity.ChangeType)
{
case EntityChangeType.Created:
TriggerEntityCreatingEvent(changedEntity.Entity);
TriggerEntityCreatedEventOnUowCompleted(changedEntity.Entity);
break;
case EntityChangeType.Updated:
TriggerEntityUpdatingEvent(changedEntity.Entity);
TriggerEntityUpdatedEventOnUowCompleted(changedEntity.Entity);
break;
case EntityChangeType.Deleted:
TriggerEntityDeletingEvent(changedEntity.Entity);
TriggerEntityDeletedEventOnUowCompleted(changedEntity.Entity);
break;
default:
throw new PlusException("Unknown EntityChangeType: " + changedEntity.ChangeType);
}
}
}
protected virtual void TriggerDomainEvents(List<DomainEventEntry> domainEvents)
{
foreach (DomainEventEntry domainEvent in domainEvents)
{
EventBus.Trigger(domainEvent.EventData.GetType(), domainEvent.SourceEntity, domainEvent.EventData);
}
}
protected virtual void TriggerEventWithEntity(Type genericEventType, object entity, bool triggerInCurrentUnitOfWork)
{
Type type = entity.GetType();
Type eventType = genericEventType.MakeGenericType(type);
if (triggerInCurrentUnitOfWork || _unitOfWorkManager.Current == null)
{
EventBus.Trigger(eventType, (IEventData)Activator.CreateInstance(eventType, entity));
}
else
{
_unitOfWorkManager.Current.Completed += delegate
{
EventBus.Trigger(eventType, (IEventData)Activator.CreateInstance(eventType, entity));
};
}
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityChangingEventData<TEntity> : EntityEventData<TEntity>
{
public EntityChangingEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityCreatedEventData<TEntity> : EntityChangedEventData<TEntity>
{
public EntityCreatedEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityCreatingEventData<TEntity> : EntityChangingEventData<TEntity>
{
public EntityCreatingEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityDeletedEventData<TEntity> : EntityChangedEventData<TEntity>
{
public EntityDeletedEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityDeletingEventData<TEntity> : EntityChangingEventData<TEntity>
{
public EntityDeletingEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityUpdatedEventData<TEntity> : EntityChangedEventData<TEntity>
{
public EntityUpdatedEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Entities
{
[Serializable]
public class EntityUpdatingEventData<TEntity> : EntityChangingEventData<TEntity>
{
public EntityUpdatingEventData(TEntity entity)
: base(entity)
{
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Exceptions
{
public class ExceptionData : EventData
{
public Exception Exception
{
get;
private set;
}
public ExceptionData(Exception exception)
{
Exception = exception;
}
}
}
\ No newline at end of file
using System;
namespace Plus.Event.Bus.Exceptions
{
public class PlusHandledExceptionData : ExceptionData
{
public PlusHandledExceptionData(Exception exception) : base(exception)
{
}
}
}
\ No newline at end of file
...@@ -10,11 +10,7 @@ namespace Plus.Event ...@@ -10,11 +10,7 @@ namespace Plus.Event
{ {
private readonly ISubscriptionService _subscriptionService; private readonly ISubscriptionService _subscriptionService;
public ILogger Logger public ILogger Logger { get; set; }
{
get;
set;
}
public EventPublisher(ISubscriptionService subscriptionService) public EventPublisher(ISubscriptionService subscriptionService)
{ {
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<PackageLicenseUrl>https://raw.githubusercontent.com/Meowv/.netcoreplus/master/LICENSE</PackageLicenseUrl> <PackageLicenseUrl>https://raw.githubusercontent.com/Meowv/.netcoreplus/master/LICENSE</PackageLicenseUrl>
<PackageTags>plus;.netcoreplus;</PackageTags> <PackageTags>plus;.netcoreplus;</PackageTags>
<PackageReleaseNotes>Plus</PackageReleaseNotes> <PackageReleaseNotes>Plus</PackageReleaseNotes>
<Version>1.0.3.1</Version> <Version>1.0.3.2</Version>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
......
using Plus.Modules; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
...@@ -10,24 +10,37 @@ namespace Plus.Reflection ...@@ -10,24 +10,37 @@ namespace Plus.Reflection
/// </summary> /// </summary>
public class AssemblyFinder : IAssemblyFinder public class AssemblyFinder : IAssemblyFinder
{ {
private readonly IPlusModuleManager _moduleManager; //private readonly IPlusModuleManager _moduleManager;
public AssemblyFinder(IPlusModuleManager moduleManager) public static AssemblyFinder Instance
{ {
_moduleManager = moduleManager; get;
private set;
} }
public List<Assembly> GetAllAssemblies() static AssemblyFinder()
{ {
var assemblies = new List<Assembly>(); Instance = new AssemblyFinder();
}
foreach (var module in _moduleManager.Modules) //public AssemblyFinder(IPlusModuleManager moduleManager)
//{
// _moduleManager = moduleManager;
//}
public List<Assembly> GetAllAssemblies()
{ {
assemblies.Add(module.Assembly); //var assemblies = new List<Assembly>();
assemblies.AddRange(module.Instance.GetAdditionalAssemblies());
} //foreach (var module in _moduleManager.Modules)
//{
// assemblies.Add(module.Assembly);
// assemblies.AddRange(module.Instance.GetAdditionalAssemblies());
//}
//return assemblies.Distinct().ToList();
return assemblies.Distinct().ToList(); return AppDomain.CurrentDomain.GetAssemblies().ToList();
} }
} }
} }
\ No newline at end of file
using Plus.Dependency;
using Plus.Services.Dto;
namespace Plus.Services
{
public interface ICrudAppService<TEntityDto, TPrimaryKey, in TCreateInput, in TUpdateInput, in TDeleteInput> : IApplicationService, ITransientDependency where TEntityDto : IEntityDto<TPrimaryKey> where TUpdateInput : IEntityDto<TPrimaryKey> where TDeleteInput : IEntityDto<TPrimaryKey>
{
TEntityDto Create(TCreateInput input);
TEntityDto Update(TUpdateInput input);
void Delete(TDeleteInput input);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment