StructureMap和ASP .Net Web API和.Net Framework 4.5

前端之家收集整理的这篇文章主要介绍了StructureMap和ASP .Net Web API和.Net Framework 4.5前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当前版本的StructureMap是否支持ASP .Net Web API,MVC 4和.NET Framework 4.5?

解决方法

here所示,Web API使用依赖关系解析器.
  1. class StructureMapDependencyResolver : IDependencyResolver
  2. {
  3. public IDependencyScope BeginScope()
  4. {
  5. return this;
  6. }
  7.  
  8. public object GetService(Type serviceType)
  9. {
  10. return ObjectFactory.GetInstance(serviceType);
  11. }
  12.  
  13. public IEnumerable<object> GetServices(Type serviceType)
  14. {
  15. return ObjectFactory.GetInstances(serviceType);
  16. }
  17.  
  18. public void Dispose()
  19. {
  20. }
  21. }

在Global.asax.cs中,包括这一行来注册依赖关系解析器:

  1. GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver();

除此之外,新的Web API非常易于与IoC容器一起使用.

我还没有看到它,但我相信我留下空白的BeginScope方法可以与子容器一起使用.

编辑:

上述实施工作很好其实我更喜欢这个替代我即将告诉你的.这将解决任何类型,以最好的StructureMap的能力,并会在出现问题时抛出错误.我喜欢看错,因为他们告诉我我做错了什么

但是,API希望如果出现问题,GetService将返回null.为了符合API,这是推荐的实现:

  1. public object GetService(Type serviceType)
  2. {
  3. if (serviceType.IsAbstract || serviceType.IsInterface)
  4. return ObjectFactory.TryGetInstance(serviceType);
  5. else
  6. return ObjectFactory.GetInstance(serviceType);
  7. }

区别在于TryGetInstance仅查找容器中注册的类型,如果出现问题,则返回null. serviceType.IsAbstract || serviceType.IsInterface被认为足够好的检查来决定使用哪种方法.我原来的答案是简单明了,但是@PHeiberg在这里的评论中指出,这并不完全是“正确的”.现在你有知识,使用任何似乎最好的.

猜你在找的asp.Net相关文章