Skip to content

配置注册

配置注册适用于构造函数的参数无法自动注入、获取实例方式特殊、同一个类型需要有多个版本实例的情况。配置类必须有 [Configuration] 标识,此时类中的所有的 public 方法都用于生成实例。 以下以数据库连接为例

基本用法

C#
[Configuration]
public class Config
{
    public DbConnection DataSource()
    {
        return new MySqlConnection("server=10.225.3.2;user=root;database=user_system;port=3306;password=****");
    }
}

[Include]
public class Program
{
    /// <summary>
    /// 默认注入,会注入最高版本
    /// </summary>
    [AutoAssemble]
    public static DbConnection connection;

    static void Main(string[] args)
    {
        AsDIContext.Start();
        Console.WriteLine(connection.ConnectionString);
    }
}

输出结果:

sh
> server=10.225.3.2;user id=root;database=user_system;port=3306;password=****

服务版本

同一个服务可以配置多个版本,用于获取同一个类型的不同版本的实例。注入时,如果没有规定版本,容器会将最高版本的实现注入,如果规定了版本,容器会将相应版本的实现注入

C#
[Configuration]
public class Config
{
    [Instance(1)]
    public DbConnection OrderSystemDataSource()
    {
        return new SqlConnection("Server=10.225.3.1; Database=order_system; User ID=sa; Password=*****;");
    }
    [Instance(2)]
    public DbConnection UserSystemDataSource()
    {
        return new MySqlConnection("server=10.225.3.2;user=root;database=user_system;port=3306;password=****");
    }
}

[Include]
public class Program
{
    /// <summary>
    /// 默认注入,会注入最高版本
    /// </summary>
    [AutoAssemble(1)]
    public static DbConnection orderConnection;
    [AutoAssemble(2)]
    public static DbConnection userConnection;
    static void Main(string[] args)
    {
        AsDIContext.Start();
        Console.WriteLine(orderConnection.ConnectionString);
        Console.WriteLine(userConnection.ConnectionString);
    }
}

输出结果:

sh
> Server=10.225.3.1; Database=order_system; User ID=sa; Password=*****;
> server=10.225.3.2;user id=root;database=user_system;port=3306;password=****

沪ICP备2025119739号