Falcon.Di/Readme.md
2019-12-27 13:59:37 +08:00

2.1 KiB
Raw Permalink Blame History

使用说明

  1. 安装通过nuget包安装。
    https://www.nuget.org/packages/Falcon.DI/

  2. 引入名字空间
    using Falcon.DI

  3. 初始化容器使用UseFalconDI方法注册所有服务。

    IServiceCollection ser = new ServiceCollection();    
    ser.UseFalconDI();    
    
  4. 添加注册特性,服务可以通过FalconDIRegisterAttribute特性进行注册。
    注册规则如下:

    1. 如果提供了服务,例如FalconDIRegister(Typeof(IMyInterface))则注册到提供的服务。
    2. 如果未提供任何服务类则注册到类型实现的所有接口、非object的基类和类型本身。
    3. 如果类型本身不可以通过反射创建,则不会注册。
    public interface IMyInterface
    {
        string Getname();
    }
    
    [FalconDIRegister]   
    public class MyClassInterfaces:IMyInterface   
    {   
        public string Getname() {    
            return this.GetType().Name;  
        }   
    }    
    
  5. 注入可以使用ServiceCollection获取注册的服务。

    using(var pd = ser.BuildServiceProvider()) {   
        var service = pd.GetServices<IMyInterface>();   
    	// Do something   
    }
    
    

    或者使用构造注入

    public interface INfi1 { }   
    public interface INfi2 { }   
    
    [FalconDIRegister]   
    public class NotFull:INfi1   
    {   
    }   
    
    [FalconDIRegister(typeof(NotFullObj))]   
    public class NotFullObj   
    {   
        public INfi1 F1 { get; set; }   
        public INfi2 F2 { get; set; }   
    
        public NotFullObj(INfi1 f1,INfi2 f2=null) {   
            this.F1 = f1;   
            this.F2 = f2;   
        }   
    }   
    

以上例子中首先注入了NotFull类型该类型提供INfi1服务然后又注册了NotFullObj类型并通过构造注入方式注入INfi1服务。INfi2因为没有注册所以使用默认值。

  1. 关于生命周期。 提供了三种实例生命周期,默认为Scoped