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
轉載于:https://www.cnblogs.com/beixing/p/3915478.html
總結
以上是生活随笔為你收集整理的Autofac 一个使用Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2014/08/13 – Backbon
- 下一篇: 【Java】Servlet 工作原理解析