Autofac 一个使用Demo

一:接口html

二:实现:工具

三:调用:ui

 

首先上图:3d

一:接口代码htm

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

 

二:实现接口

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 并返回
    }
  }
}ip

数据访问实体:get

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

  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

相关文章
相关标签/搜索