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