Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 108 additions & 4 deletions src/CatLib.Core/CatLib/App.cs
Original file line number Diff line number Diff line change
Expand Up @@ -591,16 +591,38 @@ public static Func<object> Factory(string service)
return Handler.Factory(service);
}

/// <summary>
/// 扩展容器中的服务
/// <para>允许在服务构建的过程中配置或者替换服务</para>
/// <para>如果服务已经被构建,拓展会立即生效。</para>
/// </summary>
/// <param name="closure">闭包</param>
public static void Extend(Func<object, IContainer, object> closure)
{
Handler.Extend(closure);
}

/// <summary>
/// 扩展容器中的服务
/// <para>允许在服务构建的过程中配置或者替换服务</para>
/// <para>如果服务已经被构建,拓展会立即生效。</para>
/// </summary>
/// <param name="closure">闭包</param>
public static void Extend(Func<object, object> closure)
{
Handler.Extend(closure);
}

/// <summary>
/// 扩展容器中的服务
/// <para>允许在服务构建的过程中配置或者替换服务</para>
/// <para>如果服务已经被构建,拓展会立即生效。</para>
/// </summary>
/// <typeparam name="TService">服务名或别名</typeparam>
/// <param name="closure">闭包</param>
public static void Extend<TService>(Func<object, IContainer, object> closure)
public static void Extend<TService>(Func<TService, IContainer, object> closure)
{
Handler.Extend<TService>(closure);
Handler.Extend(closure);
}

/// <summary>
Expand All @@ -610,9 +632,9 @@ public static void Extend<TService>(Func<object, IContainer, object> closure)
/// </summary>
/// <typeparam name="TService">服务名或别名</typeparam>
/// <param name="closure">闭包</param>
public static void Extend<TService>(Func<object, object> closure)
public static void Extend<TService>(Func<TService, object> closure)
{
Handler.Extend<TService>(closure);
Handler.Extend(closure);
}

/// <summary>
Expand Down Expand Up @@ -1241,6 +1263,26 @@ public static IContainer OnRelease(Action<object> callback)
return Handler.OnRelease(callback);
}

/// <summary>
/// 当静态服务被释放时
/// </summary>
/// <param name="closure">处理释放时的回调</param>
/// <returns>当前容器实例</returns>
public static IContainer OnRelease<TWhere>(Action<TWhere> closure)
{
return Handler.OnRelease(closure);
}

/// <summary>
/// 当静态服务被释放时
/// </summary>
/// <param name="closure">处理释放时的回调</param>
/// <returns>当前容器实例</returns>
public static IContainer OnRelease<TWhere>(Action<IBindData, TWhere> closure)
{
return Handler.OnRelease(closure);
}

/// <summary>
/// 当服务被解决时,生成的服务会经过注册的回调函数
/// </summary>
Expand All @@ -1251,6 +1293,68 @@ public static IContainer OnResolving(Action<object> callback)
return Handler.OnResolving(callback);
}

/// <summary>
/// 当服务被解决时,生成的服务会经过注册的回调函数
/// </summary>
/// <param name="closure">回调函数</param>
/// <returns>当前容器对象</returns>
public static IContainer OnResolving<TWhere>(Action<TWhere> closure)
{
return Handler.OnResolving(closure);
}

/// <summary>
/// 当服务被解决时,生成的服务会经过注册的回调函数
/// </summary>
/// <param name="closure">回调函数</param>
/// <returns>当前容器对象</returns>
public static IContainer OnResolving<TWhere>(Action<IBindData, TWhere> closure)
{
return Handler.OnResolving(closure);
}

/// <summary>
/// 当服务被解决事件之后的回调
/// </summary>
/// <param name="closure">闭包</param>
/// <returns>当前容器</returns>
public static IContainer OnAfterResolving(Action<IBindData, object> closure)
{
return Handler.OnAfterResolving(closure);
}

/// <summary>
/// 当服务被解决事件之后的回调
/// </summary>
/// <param name="closure">闭包</param>
/// <returns>当前容器</returns>
public static IContainer OnAfterResolving(Action<object> closure)
{
return Handler.OnAfterResolving(closure);
}

/// <summary>
/// 当服务被解决事件之后的回调
/// </summary>
/// <typeparam name="TWhere">筛选条件</typeparam>
/// <param name="closure">闭包</param>
/// <returns>当前容器</returns>
public static IContainer OnAfterResolving<TWhere>(Action<TWhere> closure)
{
return Handler.OnAfterResolving(closure);
}

/// <summary>
/// 当服务被解决事件之后的回调
/// </summary>
/// <typeparam name="TWhere">筛选条件</typeparam>
/// <param name="closure">闭包</param>
/// <returns>当前容器</returns>
public static IContainer OnAfterResolving<TWhere>(Action<IBindData, TWhere> closure)
{
return Handler.OnAfterResolving(closure);
}

/// <summary>
/// 关注指定的服务,当服务触发重定义时调用指定对象的指定方法
/// <param>调用是以依赖注入的形式进行的</param>
Expand Down
22 changes: 18 additions & 4 deletions src/CatLib.Core/Support/Container/ContainerExtend.cs
Original file line number Diff line number Diff line change
Expand Up @@ -727,9 +727,16 @@ public static Func<TService> Factory<TService>(this IContainer container, params
/// <typeparam name="TService">服务名或别名</typeparam>
/// <param name="container">服务容器</param>
/// <param name="closure">闭包</param>
public static void Extend<TService>(this IContainer container, Func<object, IContainer, object> closure)
public static void Extend<TService>(this IContainer container, Func<TService, IContainer, object> closure)
{
container.Extend(container.Type2Service(typeof(TService)), closure);
container.Extend(container.Type2Service(typeof(TService)), (instance, c) =>
{
if (instance is TService)
{
return closure((TService)instance, c);
}
return instance;
});
}

/// <summary>
Expand All @@ -740,9 +747,16 @@ public static void Extend<TService>(this IContainer container, Func<object, ICon
/// <typeparam name="TService">服务名或别名</typeparam>
/// <param name="container">服务容器</param>
/// <param name="closure">闭包</param>
public static void Extend<TService>(this IContainer container, Func<object, object> closure)
public static void Extend<TService>(this IContainer container, Func<TService, object> closure)
{
container.Extend(container.Type2Service(typeof(TService)), (instance, _) => closure(instance));
container.Extend(container.Type2Service(typeof(TService)), (instance, _) =>
{
if (instance is TService)
{
return closure((TService)instance);
}
return instance;
});
}

/// <summary>
Expand Down