依赖注入框架Autofac的简单使用
@H_502_10@ Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的。于是,今天抽空研究了下它。下载地址:http://code.google.com/p/autofac/downloads/list
@H_502_10@
@H_502_10@1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,这也是本篇文章重点使用的Autofac的类库。
@H_502_10@
@H_502_10@2)创建一个控制台工程,并且引用以上的DLL文件。创建一个数据库操作接口IDatabase.cs:
@H_
502_10@这里包含CRUD四种操作的方法。
@H_502_10@
@H_502_10@3)创建两种数据库的操作类,sqlDatabase.cs以及OracleDatabase.cs:
@H_
502_10@以及
@H_
502_10@
4)接着创建一个数据库管理器DatabaseManager.cs: @H_502_10@
@H_
502_10@
@H_502_10@5)在控制台中,编写以下测试程序:
@H_
502_10@
@H_502_10@运行结果:
@H_502_10@
@H_
502_10@通过Autofac.Configuration.SectionHandler配置节点对组件进行处理。
@H_502_10@对应的客户端程序改为:
@H_
502_10@运行结果:
@H_502_10@
7)另外还有一种方式,通过Register方法进行注册:
@H_
502_10@得到结果也是一样的。
@H_502_10@
@H_502_10@8)现在我想通过一个用户类来控制操作权限,比如增删改的权限,创建一个用户类:
Id Identity Interface
</summary> Identity
{
int Id { ; set ; }
}
User : Identity
{
; }
; }
}
@H_
502_10@修改DatabaseManager.cs代码:
@H_
502_10@在构造函数中增加了一个参数User,而Add,Save,Remove增加了权限判断。
@H_502_10@修改客户端程序:
@H_
502_10@运行结果:
@H_502_10@
分析: @H_502[email protected](user).As<User>();注册User实例。 @H_502[email protected](c => new DatabaseManager(c.Resolve<IDatabase>(),c.Resolve<User>()));通过Lampda表达式注册DatabaseManager实例。 @H_502_10@如果这里我修改User的属性值: @H_502_10@User user = new User { Id = 2,Name = "zhangsan" }; @H_502_10@运行结果: @H_502_10@
///
<summary>
Database operate interface
</summary>
public interface IDatabase
{
string Name { get ; }
void Select( commandText);
Insert( Update( Delete( commandText);
}
Database operate interface
</summary>
public interface IDatabase
{
string Name { get ; }
void Select( commandText);
Insert( Update( Delete( commandText);
}
4)接着创建一个数据库管理器DatabaseManager.cs: @H_502_10@
DatabaseManager
{
IDatabase _database;
DatabaseManager(IDatabase database)
{
_database = database;
}
Search( commandText)
{
_database.Select(commandText);
}
Add( commandText)
{
_database.Insert(commandText);
}
Save( commandText)
{
_database.Update(commandText);
}
Remove( commandText)
{
_database.Delete(commandText);
}
}
{
IDatabase _database;
DatabaseManager(IDatabase database)
{
_database = database;
}
Search( commandText)
{
_database.Select(commandText);
}
Add( commandText)
{
_database.Insert(commandText);
}
Save( commandText)
{
_database.Update(commandText);
}
Remove( commandText)
{
_database.Delete(commandText);
}
}
var builder
new
ContainerBuilder();
builder.RegisterType < DatabaseManager > ();
builder.RegisterType sqlDatabase ().As IDatabase ();
using (var container builder.Build())
{
var manager container.Resolve ();
manager.Search( SELECT * FORM USER );
}
builder.RegisterType < DatabaseManager > ();
builder.RegisterType sqlDatabase ().As IDatabase ();
using (var container builder.Build())
{
var manager container.Resolve ();
manager.Search( SELECT * FORM USER );
}
7)另外还有一种方式,通过Register方法进行注册:
ContainerBuilder();
// builder.RegisterType<DatabaseManager>();
builder.RegisterModule( ));
builder.Register(c => DatabaseManager(c.Resolve ()));
);
}
// builder.RegisterType<DatabaseManager>();
builder.RegisterModule( ));
builder.Register(c => DatabaseManager(c.Resolve ()));
);
}
Id Identity Interface
</summary> Identity
{
int Id { ; set ; }
}
User : Identity
{
; }
; }
}
DatabaseManager
{
IDatabase _database;
User _user;
DatabaseManager(IDatabase database) : this (database, null )
{
}
DatabaseManager(IDatabase database, User user)
{
_database database;
_user user;
}
Check Authority
<returns></returns> bool IsAuthority()
{
result _user != && _user.Id == 1 _user.Name leepy ? true : false ;
if ( ! result)
Console.WriteLine( Not authority! );
result;
}
commandText)
{
(IsAuthority())
_database.Insert(commandText);
}
(IsAuthority())
_database.Update(commandText);
}
(IsAuthority())
_database.Delete(commandText);
}
}
{
IDatabase _database;
User _user;
DatabaseManager(IDatabase database) : this (database, null )
{
}
DatabaseManager(IDatabase database, User user)
{
_database database;
_user user;
}
Check Authority
<returns></returns> bool IsAuthority()
{
result _user != && _user.Id == 1 _user.Name leepy ? true : false ;
if ( ! result)
Console.WriteLine( Not authority! );
result;
}
commandText)
{
(IsAuthority())
_database.Insert(commandText);
}
(IsAuthority())
_database.Update(commandText);
}
(IsAuthority())
_database.Delete(commandText);
}
}
User user
User { Id
};
var builder ContainerBuilder();
builder.RegisterModule( ));
builder.RegisterInstance(user).As User ();
builder.Register(c (), c.Resolve ()));
();
manager.Add( INSERT INTO USER ... );
}
var builder ContainerBuilder();
builder.RegisterModule( ));
builder.RegisterInstance(user).As User ();
builder.Register(c (), c.Resolve ()));
();
manager.Add( INSERT INTO USER ... );
}
分析: @H_502[email protected](user).As<User>();注册User实例。 @H_502[email protected](c => new DatabaseManager(c.Resolve<IDatabase>(),c.Resolve<User>()));通过Lampda表达式注册DatabaseManager实例。 @H_502_10@如果这里我修改User的属性值: @H_502_10@User user = new User { Id = 2,Name = "zhangsan" }; @H_502_10@运行结果: @H_502_10@
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。