| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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<object> GetServices(Type serviceType)
- {
- try
- {
- // 对于集合类型,尝试解析 IEnumerable<T>
- var enumerableType = typeof(IEnumerable<>).MakeGenericType(serviceType);
- var services = _containerProvider.Resolve(enumerableType);
- return (IEnumerable<object>)services;
- }
- catch
- {
- return Enumerable.Empty<object>();
- }
- }
- public void Dispose()
- {
- // 清理资源
- }
- }
- }
|