导航

06-002 DependencyInjection 之 IServiceDescriptor;IServiceCollection

Posted on 2015-03-20 16:58  DotNet1010  阅读(144)  评论(0)    收藏  举报

IServiceDescriptor 我理解为 是一个包装服务的一个类

 public interface IServiceDescriptor
    {
        /// <summary>
        /// Gets the <see cref="LifecycleKind"/> of the service.
        /// </summary>
        LifecycleKind Lifecycle { get; }

        /// <summary>
        /// Gets the <see cref="Type"/> of the service.
        /// </summary>
        Type ServiceType { get; }

        /// <summary>
        /// Gets the <see cref="ImplementationType"/> of the service.
        /// </summary>
        Type ImplementationType { get; }

        /// <summary>
        /// Gets the instance implementing the service.
        /// </summary>
        object ImplementationInstance { get; }

        /// <summary>
        /// Gets the factory used for creating service instances.
        /// </summary>
        Func<IServiceProvider, object> ImplementationFactory { get; }
    }

 实现类为:

 public class ServiceDescriptor : IServiceDescriptor{}

 见私有化构造函数:每个共有构造函数首先调用下面的构造函数:

 private ServiceDescriptor(Type serviceType, LifecycleKind lifecycle)
        {
            Lifecycle = lifecycle;
            ServiceType = serviceType;
        }

 说明:Lifecyle 和 ServiceType 是必须设置的字段。 其它三个字段和任选其一来设定。

再来看看 IServiceCollection:

 public interface IServiceCollection : IEnumerable<IServiceDescriptor>
    {
        IServiceCollection Add(IServiceDescriptor descriptor);
      
        IServiceCollection Add(IEnumerable<IServiceDescriptor> descriptors);
    }

 其实现类为:

public class ServiceCollection : IServiceCollection{}

 其中用一个List 来实现添加和遍历操作:

private readonly List<IServiceDescriptor> _descriptors = new List<IServiceDescriptor>();