zoukankan      html  css  js  c++  java
  • mvc4 web-api 与unity搭建接口

    对于接口重要的应该是 功能实现,合法性验证,性能监控,日志等模块

    通过unity aop功能可以实现统一的日志模块和性能监控。

    1、新建mvc4 webapi项目 nuget添加 unity 3.0+版本 和 unity.Interception

    2、重置mvc4 和webapi 的ioc容器:

     1 public class UnityDependencyResolver : System.Web.Mvc.IDependencyResolver, System.Web.Http.Dependencies.IDependencyResolver
     2     {
     3         private readonly IUnityContainer _unityContainer;
     4 
     5         public UnityDependencyResolver(IUnityContainer container)
     6         {
     7             this._unityContainer = container;
     8         }
     9 
    10         public object GetService(Type serviceType)
    11         {
    12             try
    13             {
    14                 return _unityContainer.Resolve(serviceType);
    15             }
    16             catch
    17             {
    18                 return null;
    19             }
    20         }
    21 
    22         public IEnumerable<object> GetServices(Type serviceType)
    23         {
    24             try
    25             {
    26                 return _unityContainer.ResolveAll(serviceType);
    27             }
    28             catch
    29             {
    30                 return new List<object>();
    31             }
    32         }
    33 
    34         public IDependencyScope BeginScope()
    35         {
    36             return this;
    37         }
    38 
    39         public void Dispose()
    40         {
    41         }
    42     }
     1  public class UnityConfig
     2     {
     3         public static void Register()
     4         {
     5             IUnityContainer container = new UnityContainer();
     6             container.AddNewExtension<Interception>(); //这里最重要
     7             container.LoadConfiguration();
     8             var unity = new UnityDependencyResolver(container);
     9             //设置mvc的依赖管理
    10             DependencyResolver.SetResolver(unity);
    11             //设置mvc的依赖管理
    12             GlobalConfiguration.Configuration.DependencyResolver = unity;
    13         }
    14     }

    3、在Global.asax 里调用:

     1   protected void Application_Start()
     2         {
     3             AreaRegistration.RegisterAllAreas();
     4 
     5             WebApiConfig.Register(GlobalConfiguration.Configuration);
     6             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     7             RouteConfig.RegisterRoutes(RouteTable.Routes);
     8             BundleConfig.RegisterBundles(BundleTable.Bundles);
     9             UnityConfig.Register();
    10         }

    4、最后关于 unity的配置

     1  <configSections>
     2      <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
     3   </configSections> <!-- 千万别忘了这里这是实现aop扩展 -->
     4 <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
     5     <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension,Microsoft.Practices.Unity.Interception.Configuration" />
     6     <typeAliases>
     7       <!-- Lifetime manager types -->
     8       <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
     9       <typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,Microsoft.Practices.Unity" />
    10       <typeAlias alias="perThread" type="Microsoft.Practices.Unity.PerThreadLifetimeManager,Microsoft.Practices.Unity" />
    11 
    12       <!-- User-defined type aliases -->
    13       <typeAlias alias="IBMapServer" type="CRM.Phone.Server.IBMapServer,CRM.Phone.Server" />
    14       <typeAlias alias="BMapServer" type="CRM.Phone.Server.BMapServer,CRM.Phone.Server" />
    15       <typeAlias alias="LoggingInterceptionBehavior" type="CRM.Phone.Interface.LoggingInterceptionBehavior,CRM.Phone.Interface" />
    16     </typeAliases>
    17     <container>
    18       <types>
    19         <!--<type type="IBMapServer" mapTo="BMapServer">
    20           <lifetime type="singleton" />
    21         </type>-->
    22       </types>
    23       <register type="IBMapServer" mapTo="BMapServer">
    24         <interceptor type="InterfaceInterceptor"/>
    25         <interceptionBehavior type="LoggingInterceptionBehavior"/>
    26       </register>
    27     </container>
    28   </unity>

    这里以IBMapserver 接口为例 对IMBapserver 中所有的方法进行拦截。

    5、在Controller里使用注入对象 使用Dependecy标签:

     1  public class BMapController : ApiController
     2     {
     3 
     4         [Dependency]
     5         public IBMapServer MapServer { get; set; }
     6 
     7         public Point GetPointByid(int id)
     8         {
     9             return MapServer.getPoint(id); 
    10         }
    11    }

    6、如果发现注入对象为空,而且没有报错,请一定注意文中 红色的部分

    7、最后贴一下 关于Logging处理代码

  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/rufus-hua/p/4360795.html
Copyright © 2011-2022 走看看