• Autofac 一个使用Demo


    一:接口

    二:实现:

    三:调用:

    首先上图:

    一:接口代码

    public interface IPersonDa
    {
      PersonEntity Get(int id);
    }

    二:实现

    public class PersonDa : IPersonDa
    {
      public PersonEntity Get(int id)
      {
        using (BaseMgr.BaseSysDbContext db = new BaseSysDbContext()) {
        var result = db.People.Where(p => p.Id == id).FirstOrDefault();
        return new PersonEntity();//返回 Person 成 PersonEntity 并返回
        }
      }
    }

    数据访问实体:

    public class Person
    {
      public int Id { get; set; }

      public string Name { get; set; }
    }

    传输(其他)实体:

    public class PersonEntity
    {
      public int Id { get; set; }

      public string Name { get; set; }
    }

    三:调用

    static void Main(string[] args)
    {
      ContainerBuilder builder = new ContainerBuilder();

      var basePath = AppDomain.CurrentDomain.BaseDirectory;
      var dataAccess = Assembly.LoadFrom("ChesFrame.DataAccess.dll");
      var dataAccess2 = Assembly.LoadFrom("ChesFrame.IDataAccess.dll");

      builder.RegisterAssemblyTypes(dataAccess2,dataAccess ).Where(t => t.Name.EndsWith("Da")).AsImplementedInterfaces();

      var container = builder.Build();
      foreach (var sub in container.ComponentRegistry.Registrations)
      {
        Console.WriteLine("Target-------" +sub.Target.ToString());
        Console.WriteLine("Services-----" + sub.Services.ToString());
        foreach (var m in sub.Services)
        {
          Console.WriteLine("Service------" + m.ToString());
        }
        Console.WriteLine("-------------------------------------");

      }
    var person = container.Resolve<IPersonDa>();
    }

    运行结果:

    另外说一点关于项目中使用EF:

      项目中EF只是当成了一个数据访问工具,它使用的实体为数据访问实体,数据访问实体只能出现在数据访问层中,

      看一下数据访问层的结构

      

     Person、Blog、Post 都只能在 DataAccess中,之外不能访问到;

     代码

    在项目中,这里的调用 可能需要单独抽取出来,做成Utility,可以 结合配置文件,从配置文件中提取DLL,加载入CurrentDomain中 

    Autofac入门指南:http://autofac.readthedocs.org/en/latest/getting-started/index.html

  • 相关阅读:
    base64加密后字符串长度
    Mysql如何查字段的长度,Mysql中length()、char_length()的区别
    Java 逆变与协变的名词说明
    Java 泛型在实际开发中的应用
    MySQL自增主键排序问题
    【python基础】怎么实现装饰器?
    【python基础】列表推导式
    【python】爬虫实践项目(一):39问医生
    关于DRF序列化器模型字段参数设置报错AssertionError: May not set both `read_only` and `write_only`
    DRF学习笔记
  • 原文地址:https://www.cnblogs.com/beixing/p/3915478.html
Copyright © 2020-2023  润新知