C# , .netWebApi, WPF 用特性实现类似Java 的Ioc 自动装配@Autowired
写C# 一直很羡慕Java的@Autowired 自动装配. 因为C# 必须手动在Ioc里注册
之前用接口实现了自动注册IOC, 总是觉得美中不足, 毕竟没有真正实现用注解/特性实现自动注入, 这次我们来实现一个用特性注入Ioc的扩展方法.
namespace MyCode.BLL.Service.Ioc
{/// <summary>/// 类型的生命周期枚举/// </summary>public enum Lifetime{/// <summary>/// 单例/// </summary>Singleton,/// <summary>/// 多例/// </summary>Transient,Scoped}/// <summary>/// 标注类型的生命周期、是否自动初始化/// </summary>[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]public class ExposedServiceAttribute : Attribute{public Lifetime Lifetime { get; set; }public bool AutoInitialize { get; set; }public Type[] Types { get; set; }public ExposedServiceAttribute(Lifetime lifetime = Lifetime.Transient, params Type[] types){Lifetime = lifetime;Types = types;}}
}
using Microsoft.Extensions.
C# , .netWebApi, WPF 用特性实现类似Java 的Ioc 自动装配@Autowired
写C# 一直很羡慕Java的@Autowired 自动装配. 因为C# 必须手动在Ioc里注册
之前用接口实现了自动注册IOC, 总是觉得美中不足, 毕竟没有真正实现用注解/特性实现自动注入, 这次我们来实现一个用特性注入Ioc的扩展方法.
namespace MyCode.BLL.Service.Ioc
{/// <summary>/// 类型的生命周期枚举/// </summary>public enum Lifetime{/// <summary>/// 单例/// </summary>Singleton,/// <summary>/// 多例/// </summary>Transient,Scoped}/// <summary>/// 标注类型的生命周期、是否自动初始化/// </summary>[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]public class ExposedServiceAttribute : Attribute{public Lifetime Lifetime { get; set; }public bool AutoInitialize { get; set; }public Type[] Types { get; set; }public ExposedServiceAttribute(Lifetime lifetime = Lifetime.Transient, params Type[] types){Lifetime = lifetime;Types = types;}}
}
using Microsoft.Extensions.