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
    }
  • 相关阅读:
    Hibernate映射Map属性2
    Ajax向Controller发送请求并接受数据需要注意的一个细节
    设置 jsp 表格相邻两行的颜色不一样
    Hibernate映射Map属性
    自己写的爬虫
    在一个jsp页面中引用另一个jsp文件的路径的问题
    state设计原则
    项目图标库怎样选择
    一些有用的插件
    Hook
  • 原文地址:https://www.cnblogs.com/gaobing/p/6831691.html
Copyright © 2011-2022 走看看