using Prism.Ioc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Http.Controllers; using System.Web.Http.Dependencies; namespace LocalhostMES.Controller { // 自定义的依赖解析器 public class PrismDependencyResolver : IDependencyResolver { private readonly IContainerProvider _containerProvider; public PrismDependencyResolver(IContainerProvider containerProvider) { _containerProvider = containerProvider; } public IDependencyScope BeginScope() { // 返回同一个作用域,因为 Prism 容器通常不支持作用域 return this; } public object GetService(Type serviceType) { try { // 尝试从 Prism 容器解析 // 1. 如果是控制器,从 Prism 容器解析 if (typeof(IHttpController).IsAssignableFrom(serviceType)) { return _containerProvider.Resolve(serviceType); } // 2. 如果是我们自己注册的类型,从 Prism 容器解析 if (IsCustomType(serviceType)) { return _containerProvider.Resolve(serviceType); } // 3. 其他类型(Web API 内置服务)返回 null,让 Web API 使用默认解析器 return null; } catch (ContainerResolutionException) { // 如果类型未注册,返回 null(Web API 会使用默认构造函数) return null; } catch { return null; } } private bool IsCustomType(Type serviceType) { // 检查是否是我们自定义的类型 var typeName = serviceType.FullName ?? ""; // 添加我们需要处理的类型 var customTypes = new[] { "LocalhostMES.Controller.Management", "LocalhostMES.Controller.ApiClient", // 添加其他需要从 Prism 容器解析的类型 }; return Array.Exists(customTypes, t => typeName.Contains(t)); } public IEnumerable GetServices(Type serviceType) { try { // 对于集合类型,尝试解析 IEnumerable var enumerableType = typeof(IEnumerable<>).MakeGenericType(serviceType); var services = _containerProvider.Resolve(enumerableType); return (IEnumerable)services; } catch { return Enumerable.Empty(); } } public void Dispose() { // 清理资源 } } }