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