由于winform的framework框架无法实现core那样的依赖注入,必须借助于依赖注入框架来实现。

此次使用Autofac,由于DAL被BLL引用,而BLL又被主程序引用,所以在framework里要实现依赖注入,主程序必须引用DAL和BLL,才可以在主程序里面对DAL和BLL进行注册,这又违背了解耦的原则,所以只能在BLL和主程序之间是用依赖注入,这样意义也不是特别大。

主程序代码示例:

  internal static class Program
  {
      public static IContainer Container { get; set; }
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main()
      {
          //初始化Autofac
          //1、实例化注入的容器
          ContainerBuilder builder = new ContainerBuilder();
          //2、添加依赖解析
          //添加数据库上下文注册,此处采用全局静态变量的方式
          // Register SqlSugarClient as a singleton
          //builder.Register(c => SqlSugarConfig.GetInstance()).As<SqlSugarClient>().SingleInstance();

          //添加DAL注册,由于DAL被BLL引用,故不在此处注入

          //添加BLL注册
          builder.RegisterType<CostXinnuoBLL>().As<ICostXinnuoBLL>().InstancePerDependency();
                  

          //注册窗体
          builder.RegisterType<FrmMain>().AsSelf().InstancePerDependency();


          Container = builder.Build();


          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          //Application.Run(new FrmQuotationSystem());
          Application.Run(Container.Resolve<FrmMain>());

      }
  }

 SqlSugar的配置

/// <summary>
/// 依赖注入方式
/// </summary>
public class SqlSugarConfig
{
    private static readonly string connectionString = "server=localhost;User Id=root;password=123456;Database=oa;allowuservariables=True;";

    public static SqlSugarClient GetInstance()
    {
        var db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = connectionString,
            DbType = DbType.MySql,
            IsAutoCloseConnection = true,
            InitKeyType = InitKeyType.Attribute
        });

        return db;
    }
}