gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:01:29 26 4
gpt4 key购买 nike

当前版本的 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 在评论中指出它并不完全“正确”。既然您已经掌握了知识,请使用看起来最好的东西。

关于.net - StructureMap 和 ASP .Net Web API 和 .Net Framework 4.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com