加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:02:53 所属栏目:asp.Net 来源:网络整理
导读:当前版本的StructureMap是否支持ASP .Net Web API,MVC 4和.NET Framework 4.5? 解决方法 如 here所示,Web API使用依赖关系解析器. class StructureMapDependencyResolver : IDependencyResolver{ public IDependencyScope BeginScope() { return this; } pu
当前版本的StructureMap是否支持ASP .Net Web API,MVC 4和.NET Framework 4.5?

解决方法

如 here所示,Web API使用依赖关系解析器.
class StructureMapDependencyResolver : IDependencyResolver
{
    public IDependencyScope BeginScope()
    {
        return this; 
    }

    public object GetService(Type serviceType)
    {
        return ObjectFactory.GetInstance(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return ObjectFactory.GetInstances(serviceType);
    }

    public void Dispose()
    {
    }
}

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

GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver();

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

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

编辑:

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

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

public object GetService(Type serviceType)
{
    if (serviceType.IsAbstract || serviceType.IsInterface)
        return ObjectFactory.TryGetInstance(serviceType);
    else 
        return ObjectFactory.GetInstance(serviceType);
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读