复制代码 ) Y! [9 ^. X" y, `1 ?* t. G- m 然后注入实现构造函数注入:3 s8 w3 I, q3 P1 z; g
public class DBManager
{
IDAL _dal; $ W1 Y; W2 s' v. v
public DBManager(IDAL dal) % B3 c" l* E& p9 T. y
{
_dal= dal;
} 3 B* U4 G0 G$ i- J- ~
public void Add(string commandText) 4 W) u2 @. W$ c3 C! S8 g
{ 7 O! {9 _' B% n; p. _
_dal.Insert(commandText); r1 r. }# Z: ]
} ; W3 E+ H2 T9 T1 h, o( o }
}
复制代码
最后要真正完成依赖注入就得AtuoFac登场了:
var builder = new ContainerBuilder(); 5 P: G; }9 N( _+ C, e- v% p7 g
builder.RegisterType<DBManager>();
builder.RegisterType<SqlDAL>().As<IDAL>();
using (var container = builder.Build())
{
var manager = container.Resolve<DBManager>(); ) ~) m" x d+ y0 Y
manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')"); 0 n' e5 V, ?6 _2 `
}
复制代码 / C/ O$ z w2 z! s 从以上栗子可以看出,其实AutoFac的使用跟Unity的使用有点像,关键的东东就是这个Container容器类 2、AutoFac常用方法说明* k' B# `. O3 U (1)builder.RegisterType<Object>().As<Iobject>():注册类型及其实例。例如下面就是注册接口IDAL的实例SqlDAL6 z* v1 Y H a: y8 N3 R3 }' G7 c
ContainerBuilder builder = new ContainerBuilder();
复制代码 (6)IContainer.ResolveKeyed<IDAL>(Enum enum):根据枚举值解析某个接口的特定实例。例如上面的最后一行代码就是解析IDAL的特定实例OracleDAL (7)builder.RegisterType<Worker>().InstancePerDependency():用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式3 M0 j6 w. E) B% s L (8)builder.RegisterType<Worker>().SingleInstance():用于控制对象的生命周期,每次加载实例时都是返回同一个实例 (9)IContainer.Resolve<T>(NamedParameter namedParameter):在解析实例T时给其赋值