using Prism.Ioc; using System; using System.Collections.Generic; using System.Linq; using System.Web.Http.Controllers; using System.Web.Http.Dependencies; namespace LocalhostMES.Infrastructure { /// /// Web API 与 Prism 容器桥接(需要时可在此扩展从容器解析的类型)。 /// public class PrismDependencyResolver : IDependencyResolver { private readonly IContainerProvider _containerProvider; public PrismDependencyResolver(IContainerProvider containerProvider) { _containerProvider = containerProvider; } public IDependencyScope BeginScope() { return this; } public object GetService(Type serviceType) { try { if (typeof(IHttpController).IsAssignableFrom(serviceType)) { return _containerProvider.Resolve(serviceType); } if (IsRegisteredCustomType(serviceType)) { return _containerProvider.Resolve(serviceType); } return null; } catch (ContainerResolutionException) { return null; } catch { return null; } } private static bool IsRegisteredCustomType(Type serviceType) { // 当前控制器均使用无参构造;若后续有需注入单例,在此按类型或命名空间登记。 return false; } public IEnumerable GetServices(Type serviceType) { try { var enumerableType = typeof(IEnumerable<>).MakeGenericType(serviceType); var services = _containerProvider.Resolve(enumerableType); return (IEnumerable)services; } catch { return Enumerable.Empty(); } } public void Dispose() { } } }