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

相關文章
相關標籤/搜索