zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    变态的IE
    视频豪横时代,应用如何快速构建视频点播能力?
    阿里云峰会 | 阿里云CDN六大边缘安全能力,全力助推政企数字化转型
    从 2018 年 Nacos 开源说起
    完美日记:实现高弹性高稳定电商架构
    Dubbo 迈出云原生重要一步 应用级服务发现解析
    如何提升微服务的幸福感
    怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东
    云原生时代消息中间件的演进路线
    solr中特殊字符的处理
  • 原文地址:https://www.cnblogs.com/beixing/p/3915478.html
Copyright © 2011-2022 走看看