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>();
浙公网安备 33010602011771号