我正在尝试使用 Unity 根据本文注入依赖项:
http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver
这是我的 global.asax 中的内容
void ConfigureApi(HttpConfiguration config)
{
var unity = new UnityContainer();
unity.RegisterType<CustomerController>();
unity.RegisterType<TPS.Data.Can.IUnitOfWork, TPS.Data.Can.EFRepository.UnitOfWork>(new HierarchicalLifetimeManager());
config.DependencyResolver = new IoCContainer(unity);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureApi(GlobalConfiguration.Configuration);
}
这是我的 API 控制器:
public class CustomerController : ApiController
{
private TPS.Data.Can.IRepository<tblCustomer> _repo;
private TPS.Data.Can.IUnitOfWork _uow;
public CustomerController() { }
public CustomerController(TPS.Data.Can.IUnitOfWork uow) {
_uow = uow;
_repo = uow.CustomerRepository;
}
// GET api/customer/5
public IEnumerable<Customer> Get()
{
string identity = HttpContext.Current.User.Identity.Name;
//REFACTOR THIS
if (String.IsNullOrWhiteSpace(identity))
identity = "chardie";
var customers = from c in _repo.Get()
where c.SalesRep == identity
select new Customer
{
IDCUST = null,
CustCode = c.CustCode,
CustName = c.CustName
};
return customers.ToList();
}
这在我第一次开始调试我的应用程序时有效。如果我在参数化构造函数中设置断点,那么当我第一次点击 Web API 时,就会触发断点。当我在浏览器中点击刷新时,不会调用构造函数,不会注入依赖项,并且 Get() 操作会引发异常,因为预期的存储库为空。
谁能告诉我为什么在第一次请求后没有调用我的构造函数?
谢谢!
克里斯
编辑
FWIW,我完全从 Web API 控制器中删除了无参数构造函数,在我第二次请求它时,我得到了异常:
Type 'TPS.Website.Api.CustomerController' does not have a default constructor
所以看起来我在第一个请求上注入了我的 repo 依赖项,但之后 Web API 控制器的每个实例化都是通过无参数构造函数完成的。