首页 > 其他 > 详细

Autofac -入门练习

时间:2020-11-04 14:29:53      阅读:25      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

1.创建一个控制台项目 AutofacConsole

2.创建文件夹Abstract,在文件夹中创建接口

namespace AutofacConsole.Abstract
{
public interface IDatabase
{
string Name { get; }
void Select(string commandText);
void Insert(string commandText);
void Update(string commandText);
void Delete(string commandText);
}
}

3.创建文件夹Data,在文件夹中分别创建类文件SqlServerDatabase.cs 和MySqlDatabase.cs

using AutofacConsole.Abstract;
using System;
namespace AutofacConsole.Data
{
public class MySqlDatabase : IDatabase
{
public string Name
{
get
{
return "MySql";
}
}

public void Delete(string commandText)
{
Console.WriteLine(string.Format("{0} is a delete sql in {1}", commandText, Name));;
}

public void Insert(string commandText)
{
Console.WriteLine(string.Format("{0} is a insert sql in {1}", commandText, Name));
}

public void Select(string commandText)
{
Console.WriteLine(string.Format("{0} is a select sql in {1}", commandText, Name));
}

public void Update(string commandText)
{
Console.WriteLine(string.Format("{0} is a update sql in {1}", commandText, Name));
}
}
}

using AutofacConsole.Abstract;
using System;


namespace AutofacConsole.Data
{
public class SqlDatabase : IDatabase
{
public string Name
{
get
{
return "SqlServer";
}
}

public void Delete(string commandText)
{
Console.WriteLine(string.Format("{0} is a delete sql in {1}", commandText, Name));
}

public void Insert(string commandText)
{
Console.WriteLine(string.Format("{0} is a insert sql in {1}", commandText, Name));
}

public void Select(string commandText)
{
Console.WriteLine(string.Format("{0} is a query sql in {1}",commandText,Name)) ;
}

public void Update(string commandText)
{
Console.WriteLine(string.Format("{0} is a update sql in {1}", commandText, Name));
}
}
}

4.在文件夹Data中,创建类DatabaseManager.cs

 

using AutofacConsole.Abstract;

namespace AutofacConsole.Data
{
public class DatabaseManager
{
IDatabase _database;
public DatabaseManager(IDatabase database)
{
_database = database;
}
public void Search(string commandText)
{
_database.Select(commandText);
}
public void Add(string commandText)
{
_database.Insert(commandText);
}
public void Save(string commandText)
{
_database.Insert(commandText);
}
public void Remove(string commandText)
{
_database.Delete(commandText);
}
}
}

5.在控制台程序中增加依赖注入代码

安装autofac:install-package autofac -version 5.2.0 

using Autofac;
using AutofacConsole.Abstract;
using AutofacConsole.Data;
using System;
namespace AutofacConsole
{
class Program
{
static void Main(string[] args)
{
RegisterResolver();
Console.ReadLine();
}
static void RegisterResolver()
{
var builder = new ContainerBuilder();
builder.RegisterType<DatabaseManager>();//注册实现类
builder.RegisterType<SqlDatabase>().As<IDatabase>(); //这样注册以后,DatabaseManager就可以通过构造器注入了
using (var container = builder.Build()) //返回IContainer对象
{
var manager = container.Resolve<DatabaseManager>(); //得到注册的类型的对象
manager.Search("select * from user");
}
}
}
}

这里通过ContainerBuilder方法RegisterType对DatabaseManager进行注册,当注册的类型在相应的容器中可以Resolve你的DatabaseManager实例。

builder.RegisterType<SqlDatabase>().As<IDatabase>();通过AS可以让DatabaseManager类中通过构造函数依赖注入类型相应的接口。

Build()方法生成一个对应的Container实例,这样,就可以通过Resolve解析到注册的类型实例。

 

Autofac -入门练习

原文:https://www.cnblogs.com/sundh1981/p/13924648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!