| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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
- {
- /// <summary>
- /// Web API 与 Prism 容器桥接(需要时可在此扩展从容器解析的类型)。
- /// </summary>
- 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<object> GetServices(Type serviceType)
- {
- try
- {
- var enumerableType = typeof(IEnumerable<>).MakeGenericType(serviceType);
- var services = _containerProvider.Resolve(enumerableType);
- return (IEnumerable<object>)services;
- }
- catch
- {
- return Enumerable.Empty<object>();
- }
- }
- public void Dispose()
- {
- }
- }
- }
|