• 【IOC--Common Service Locator】不依赖于某个具体的IoC


    你在你的应用程序应用IoC容器了吗,你是否希望不依赖于某个具体的IoC,微软的模式与实践团队在Codeplex上发布的Common Service Locator。Common Service Locator 类库包含应用程序和框架开发者引用Service location共享的接口。这个类库提供了在IOC容器和Service locators之上抽象。使用这个类库允许一个应用程序在没有强引用依赖下间接的访问的能力。它所定义的接口非常简单:{

    http://www.cnblogs.com/shanyou/archive/2008/12/27/1363785.html

    Unity Adapter下载:

    http://commonservicelocator.codeplex.com/wikipage?title=Unity%20Adapter&referringTitle=Home

    UnityServiceLocator.cs

     1 using System;
     2 using System.Collections.Generic;
     3 using Microsoft.Practices.ServiceLocation;
     4 
     5 namespace Microsoft.Practices.Unity.ServiceLocatorAdapter
     6 {
     7     public class UnityServiceLocator : ServiceLocatorImplBase
     8     {
     9         private IUnityContainer container;
    10 
    11         public UnityServiceLocator(IUnityContainer container)
    12         {
    13             this.container = container;
    14         }
    15 
    16         /// <summary>
    17         ///             When implemented by inheriting classes, this method will do the actual work of resolving
    18         ///             the requested service instance.
    19         /// </summary>
    20         /// <param name="serviceType">Type of instance requested.</param>
    21         /// <param name="key">Name of registered service you want. May be null.</param>
    22         /// <returns>
    23         /// The requested service instance.
    24         /// </returns>
    25         protected override object DoGetInstance(Type serviceType, string key)
    26         {
    27             return container.Resolve(serviceType, key);
    28         }
    29 
    30         /// <summary>
    31         ///             When implemented by inheriting classes, this method will do the actual work of
    32         ///             resolving all the requested service instances.
    33         /// </summary>
    34         /// <param name="serviceType">Type of service requested.</param>
    35         /// <returns>
    36         /// Sequence of service instance objects.
    37         /// </returns>
    38         protected override IEnumerable<object> DoGetAllInstances(Type serviceType)
    39         {
    40             return container.ResolveAll(serviceType);
    41         }
    42     }
    43 }

     ServiceLocatorImplBase 

    #region 程序集 Microsoft.Practices.ServiceLocation.dll, v2.0.50727
    CommonServiceLocator.UnityAdapterLibMicrosoft.Practices.ServiceLocation.dll
    #endregion
    
    using System;
    using System.Collections.Generic;
    
    namespace Microsoft.Practices.ServiceLocation
    {
        // 摘要:
        //     This class is a helper that provides a default implementation for most of
        //     the methods of Microsoft.Practices.ServiceLocation.IServiceLocator.
        public abstract class ServiceLocatorImplBase : IServiceLocator, IServiceProvider
        {
            protected ServiceLocatorImplBase();
    
            // 摘要:
            //     When implemented by inheriting classes, this method will do the actual work
            //     of resolving all the requested service instances.
            //
            // 参数:
            //   serviceType:
            //     Type of service requested.
            //
            // 返回结果:
            //     Sequence of service instance objects.
            protected abstract IEnumerable<object> DoGetAllInstances(Type serviceType);
            //
            // 摘要:
            //     When implemented by inheriting classes, this method will do the actual work
            //     of resolving the requested service instance.
            //
            // 参数:
            //   serviceType:
            //     Type of instance requested.
            //
            //   key:
            //     Name of registered service you want. May be null.
            //
            // 返回结果:
            //     The requested service instance.
            protected abstract object DoGetInstance(Type serviceType, string key);
            //
            // 摘要:
            //     Format the exception message for use in an Microsoft.Practices.ServiceLocation.ActivationException
            //     that occurs while resolving multiple service instances.
            //
            // 参数:
            //   actualException:
            //     The actual exception thrown by the implementation.
            //
            //   serviceType:
            //     Type of service requested.
            //
            // 返回结果:
            //     The formatted exception message string.
            protected virtual string FormatActivateAllExceptionMessage(Exception actualException, Type serviceType);
            //
            // 摘要:
            //     Format the exception message for use in an Microsoft.Practices.ServiceLocation.ActivationException
            //     that occurs while resolving a single service.
            //
            // 参数:
            //   actualException:
            //     The actual exception thrown by the implementation.
            //
            //   serviceType:
            //     Type of service requested.
            //
            //   key:
            //     Name requested.
            //
            // 返回结果:
            //     The formatted exception message string.
            protected virtual string FormatActivationExceptionMessage(Exception actualException, Type serviceType, string key);
            //
            // 摘要:
            //     Get all instances of the given TService currently registered in the container.
            //
            // 类型参数:
            //   TService:
            //     Type of object requested.
            //
            // 返回结果:
            //     A sequence of instances of the requested TService.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is are errors resolving the service instance.
            public virtual IEnumerable<TService> GetAllInstances<TService>();
            //
            // 摘要:
            //     Get all instances of the given serviceType currently registered in the container.
            //
            // 参数:
            //   serviceType:
            //     Type of object requested.
            //
            // 返回结果:
            //     A sequence of instances of the requested serviceType.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is are errors resolving the service instance.
            public virtual IEnumerable<object> GetAllInstances(Type serviceType);
            //
            // 摘要:
            //     Get an instance of the given TService.
            //
            // 类型参数:
            //   TService:
            //     Type of object requested.
            //
            // 返回结果:
            //     The requested service instance.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is are errors resolving the service instance.
            public virtual TService GetInstance<TService>();
            //
            // 摘要:
            //     Get an instance of the given named TService.
            //
            // 参数:
            //   key:
            //     Name the object was registered with.
            //
            // 类型参数:
            //   TService:
            //     Type of object requested.
            //
            // 返回结果:
            //     The requested service instance.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is are errors resolving the service instance.
            public virtual TService GetInstance<TService>(string key);
            //
            // 摘要:
            //     Get an instance of the given serviceType.
            //
            // 参数:
            //   serviceType:
            //     Type of object requested.
            //
            // 返回结果:
            //     The requested service instance.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is an error resolving the service instance.
            public virtual object GetInstance(Type serviceType);
            //
            // 摘要:
            //     Get an instance of the given named serviceType.
            //
            // 参数:
            //   serviceType:
            //     Type of object requested.
            //
            //   key:
            //     Name the object was registered with.
            //
            // 返回结果:
            //     The requested service instance.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is an error resolving the service instance.
            public virtual object GetInstance(Type serviceType, string key);
            //
            // 摘要:
            //     Implementation of System.IServiceProvider.GetService(System.Type).
            //
            // 参数:
            //   serviceType:
            //     The requested service.
            //
            // 返回结果:
            //     The requested object.
            //
            // 异常:
            //   Microsoft.Practices.ServiceLocation.ActivationException:
            //     if there is an error in resolving the service instance.
            public virtual object GetService(Type serviceType);
        }
    }
  • 相关阅读:
    五大常用算法之一:分治算法
    【Redis实战】双写一致性问题和解决方案
    大厂面试官喜欢这样问Redis,双写一致性、并发竞争、线程模型,我整理好了
    布隆过滤器的原理以及使用场景
    死磕 Redis- 布隆过滤器
    布隆过滤器(Bloom Filter)原理及实现
    布隆过滤器(亿级数据过滤算法)
    Java防止SQL注入2(通过filter过滤器功能进行拦截)
    java项目中如何防止sql注入
    java如入防止sql注入
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3709960.html
Copyright © 2020-2023  润新知