aspnet网站开发实例 ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(2)[1]
ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(2)[1]
基于IoC的ControllerFactory( )
我们创建一个EmployeeRepository对象来进行数据的获取 并为它定义了对应的接口IEmployeeRepository 如下面的代码片段所示 IEmployeeRepository仅仅具有一个返回Employee列表的唯一方法GetEmployees 用于获取指定ID的员工信息 如果指定的ID为空 则返回所有员工列表 EmployeeRepository直接利用一个静态字段模拟对数据的存储
![aspnet网站开发实例 ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(2)[1]](http://img.zhputi.com/uploads/797b/797b4eedf56ae1fd659e082555bb776742247.jpg)
public interface IEmployeeRepository
{
IEnumerable<Employee> GetEmployees(string id = )
}
public class EmployeeRepository : IEmployeeRepository
{
private static IList<Employee> employees;
static EmployeeRepository()
{
employees = new List<Employee>()
employees Add(new Employee( 张三 男 new DateTime( )
销售部 ))
employees Add(new Employee( 李四 女 new DateTime( )
人事部 ))
employees Add(new Employee( 王五 男 new DateTime( )
人事部 ))
}
public IEnumerable<Employee> GetEmployees(string id = )
{
return employees Where(e => e Id == id || string IsNullOrEmpty(id))
}
}
我们创建了一个具有如下定义的EmployeeController 它具有一个类型为IEmployeeRepository的属性Repository 应用在上面的DependencyAttribute特性告诉我们这是一个 依赖属性 当我们采用UnityContainer来激活EmployeeController对象的时候 会根据注册的类型映射来实例化一个实现了IEmployeeRepository的类型的实例来初始化该属性
public class EmployeeController : Controller
{
[Dependency]
public IEmployeeRepository Repository { get; set; }
public ActionResult GetAllEmployees()
{
var employees = this Repository GetEmployees()
return View( EmployeeList employees)
}
public ActionResult GetEmployeeById(string id)
{
Employee employee = this Repository GetEmployees(id) FirstOrDefault()
if (null == employee)
{
throw new HttpException( string Format( ID为{ }的员工不存在 id))
}
return View( Employee employee)
}
}
EmployeeController定义了两个基本的Action方法 GetAllEmployees通过Repository获取所有员工列表并将其通过名位EmployeeList的View呈现出来 另一个Action方法GetEmployeeById根据指定的ID获取相应的员工信息 最终用于呈现单个员工信息的View为Employee 如果根据指定的ID找不到相应的员工 直接抛出一个状态为 的HttpException异常
lishixinzhi/Article/program/net/201311/16071