您的位置:首页 > 其它

使用IBatisNet + Castle 开发DotNet软件

2007-01-04 13:15 363 查看
本文主要讲述我在项目中如何使用IBatisNet + Castle的结构来进行开发的。软件的主框架如下图:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<facilities>

<facility id="ibatis" type="Castle.Facilities.IBatisNetIntegration.IBatisNetFacility, Castle.Facilities.IBatisNetIntegration" >
<sqlMap id="sqlServerSqlMap" config="SqlMap.config" />
</facility>

<facility id="transaction" type="Castle.Facilities.AutomaticTransactionManagement.TransactionFacility, Castle.Facilities.AutomaticTransactionManagement" />

</facilities>

</configuration>

三、IOC的配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<components>
<component
id="insititution"
service="FES.Service.Interfaces.IInstitutionService, FES.Service"
type="FES.Service.InsititutionService, FES.Service" />
</components>

</configuration>

目前IOC的配置还可支持泛型,详细请参考:
福 娃 [Castle]Castle也范型

当这些配置文件都写好之后,我们还需将其加载到Castle容器当中,具体的代码可写在Global.asax文件。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

using Castle.Windsor;
using Castle.Core.Resource;
using Castle.Windsor.Configuration.Interpreters;

namespace FES.Web
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

using System.Web;
using System.Web.Security;
using System.Reflection;
using System.Data;
using System.Configuration;
using Castle.Core;
using Castle.Windsor;
using Castle.Windsor.Configuration.Interpreters;

namespace FES.Component

五、从Castle容器中得到ISqlMapper的实例
本系统将IBatisNet交给Castle来管理,所以ISqlMapper的实例也必须从Castle容器中获取,这样Castle才能真正的管理IBatisNet。
首先我们需要一个得到容器实例的方法:

public static IWindsorContainer GetContainer()
public static ISqlMapper sqlMap = (ContainerAccessorUtil.GetContainer())["sqlServerSqlMap"] as ISqlMapper;

其中"sqlServerSqlMap"即是在我们配置IBatisNet Facility时指定的。

五、在Service层中使用事务处理

using System;
using System.Collections.Generic;
using System.Text;

using FES.Persistence;
using FES.Model;
using FES.Service.Interfaces;

using Castle.Services.Transaction;
using Castle.Facilities.IBatisNetIntegration;

namespace FES.Service
{
[Transactional]
[UsesAutomaticSessionCreation]
public class InsititutionService : IInstitutionService
{
IInstitutionService Members#region IInstitutionService Members
private InstitutionMapDao _institution;
public InsititutionService(InstitutionMapDao institution)
{
_institution = institution;
}

[Transaction(TransactionMode.Requires)]
public void NewDepartmentAndEmployee(Employee emp,int did)
{
_institution.NewEmployee(emp,did);
_institution.NewDepartment(null);

}

#endregion
}
}

写的很简单,希望高手指点。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐