zoukankan      html  css  js  c++  java
  • WCF

      /// <summary>
        /// IOC实例提供者,基于AutoFac
        /// 
        /// </summary>
        public class IocInstanceProvider : IInstanceProvider
        {
            Type serviceType;
            IContainer container;
    
            public IocInstanceProvider(Type serviceType)
            {
                this.serviceType = serviceType;
                container = RegisterDependency();
            }
            private IContainer RegisterDependency()
            {
                var builder = new ContainerBuilder();
    
               
                builder.RegisterType(Service1).InstancePerLifetimeScope();
                
    
                //配置外部接口
               builder.RegisterType<Test>().As<ITest>().SingleInstance();
                return builder.Build();
            }
    
    
            public object GetInstance(InstanceContext instanceContext, Message message)
            {
                return container.Resolve(serviceType);
            }
    
            public object GetInstance(InstanceContext instanceContext)
            {
                return GetInstance(instanceContext, null);
            }
    
            public void ReleaseInstance(InstanceContext instanceContext, object instance)
            {
                if (instance is IDisposable)
                    ((IDisposable)instance).Dispose();
            }
        }
    /// <summary>
        /// 使用IOC必须加上的特性,只能在实现类上使用
        /// 
        /// </summary>
        public class IocServiceBehavior : Attribute, IServiceBehavior
        {
            public void AddBindingParameters(ServiceDescription serviceDescription
                                            , ServiceHostBase serviceHostBase
                                            , Collection<ServiceEndpoint> endpoints
                                            , BindingParameterCollection bindingParameters)
            {
    
            }
    
            public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
            {
                foreach (ChannelDispatcher item in serviceHostBase.ChannelDispatchers)
                {
                    foreach (var ed in item.Endpoints)
                    {
                        if (!ed.IsSystemEndpoint)
                        {
                            ed.DispatchRuntime.InstanceProvider = new IocInstanceProvider(serviceDescription.ServiceType);
                        }
                    }
                }
            }
    
            public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
            {
            }
        }

    使用:

    [IocServiceBehavior]
    public class Service1:IService1{
    
      //methods
    }
  • 相关阅读:
    Tomcat7,Tomcat8 的manager 配置
    JavaScript 获得当前日期+时间
    CentOS 安装jdk 1.8
    nginx文件结构与解析,例子
    jxl解析多个excel工作表-java代码
    一个上传图片,预览图片的小demo
    利用DES,C#加密,Java解密代码
    CentOS安装Nginx
    摄像机标定--很懒的方法
    slam-g2o安装失败的解决问题
  • 原文地址:https://www.cnblogs.com/gaobing/p/6831691.html
Copyright © 2011-2022 走看看