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
    }
  • 相关阅读:
    Unity中溶解shader的总结
    Unity Shader 知识点总结(二)
    Unity Shader 知识点总结(一)
    Unity优化之GC——合理优化Unity的GC
    nuxt中使用vant框架
    Redux第一节
    React动画库
    react一写工具
    几种下载第三方的方式有何不同
    React生命周期函数
  • 原文地址:https://www.cnblogs.com/gaobing/p/6831691.html
Copyright © 2011-2022 走看看