mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-20 00:06:45 +08:00
修改了Ioc相同类型实例化了多个对象的问题
This commit is contained in:
@@ -11,11 +11,31 @@ namespace Serein.Library.Api
|
||||
/// </summary>
|
||||
object GetOrCreateServiceInstance(Type serviceType, params object[] parameters);
|
||||
T CreateServiceInstance<T>(params object[] parameters);
|
||||
ISereinIoc Reset(); // 清空
|
||||
/// <summary>
|
||||
/// 清空
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
ISereinIoc Reset();
|
||||
|
||||
/// <summary>
|
||||
/// 以已存在的实例对象注册
|
||||
/// </summary>
|
||||
/// <param name="instantiate"></param>
|
||||
/// <returns></returns>
|
||||
ISereinIoc RegisterInstantiate(object instantiate);
|
||||
/// <summary>
|
||||
/// 注册实例
|
||||
/// </summary>
|
||||
ISereinIoc Register(Type type, params object[] parameters);
|
||||
ISereinIoc Register<T>(params object[] parameters);
|
||||
ISereinIoc Register<TService, TImplementation>(params object[] parameters) where TImplementation : TService;
|
||||
/// <summary>
|
||||
/// 获取或创建并注入目标类型
|
||||
/// </summary>
|
||||
T GetOrInstantiate<T>();
|
||||
/// <summary>
|
||||
/// 获取或创建并注入目标类型
|
||||
/// </summary>
|
||||
object GetOrInstantiate(Type type);
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Serein.Library.Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 作用实例
|
||||
/// 作用实例的类型
|
||||
/// </summary>
|
||||
|
||||
public Type ActingInstanceType { get; set; }
|
||||
|
||||
@@ -35,7 +35,9 @@ namespace Serein.Library.Enums
|
||||
Action,
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 生成的节点控件
|
||||
/// </summary>
|
||||
public enum NodeControlType
|
||||
{
|
||||
None,
|
||||
|
||||
@@ -70,6 +70,21 @@ namespace Serein.Library.Utils
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISereinIoc RegisterInstantiate(object instantiate)
|
||||
{
|
||||
//var type = instantiate.GetType();
|
||||
if (!_typeMappings.TryGetValue(instantiate.GetType().FullName,out var type))
|
||||
{
|
||||
_typeMappings[type.FullName] = type;
|
||||
}
|
||||
|
||||
if(!_dependencies.TryGetValue(type.FullName, out var instancei))
|
||||
{
|
||||
_dependencies[type.FullName] = Activator.CreateInstance(type);
|
||||
}
|
||||
// _dependencies.AddOrUpdate(type.FullName,s => instantiate, (s,o) => instantiate);
|
||||
return this;
|
||||
}
|
||||
public ISereinIoc Register(Type type, params object[] parameters)
|
||||
{
|
||||
|
||||
@@ -127,21 +142,20 @@ namespace Serein.Library.Utils
|
||||
}
|
||||
public ISereinIoc Build()
|
||||
{
|
||||
|
||||
// 遍历已注册类型
|
||||
foreach (var type in _typeMappings.Values)
|
||||
{
|
||||
|
||||
// 如果没有创建实例,则创建对应的实例
|
||||
if(!_dependencies.ContainsKey(type.FullName))
|
||||
{
|
||||
|
||||
_dependencies[type.FullName] = Activator.CreateInstance(type);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 注入实例的依赖项
|
||||
foreach (var instance in _dependencies.Values)
|
||||
{
|
||||
|
||||
InjectDependencies(instance); // 替换占位符
|
||||
}
|
||||
|
||||
@@ -155,7 +169,7 @@ namespace Serein.Library.Utils
|
||||
{
|
||||
var instance = Activator.CreateInstance(controllerType, parameters);
|
||||
if(instance != null)
|
||||
{
|
||||
{
|
||||
InjectDependencies(instance);
|
||||
}
|
||||
return instance;
|
||||
@@ -285,6 +299,7 @@ namespace Serein.Library.Utils
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user