温莎城堡中的Pick().If()vs Where()

本文关键字:If vs Where Pick 城堡 | 更新日期: 2023-09-27 18:23:55

温莎城堡中的函数if()和where()之间有什么区别。我在代码中遇到了这两种组件注册的方法

1)

container.Register(
            Classes.FromAssemblyInThisApplication()
                .Where(x=> x.IsClass && x.GetAllInterfaces().Length > 0)
                .WithService.AllInterfaces()
                .LifestyleSingleton());

2)

container.Register(
            Classes.FromAssemblyInThisApplication()
                .Pick()
                .If(x=> x.IsClass && x.GetAllInterfaces().Length > 0)
                .WithService.AllInterfaces()
                .LifestyleSingleton());

我想知道这两种组件注册方式之间有什么区别。

温莎城堡中的Pick().If()vs Where()

如果您查看源代码,您会发现Where(实际上)做了与Pick()相同的事情,另外在内部添加了对.If的调用。这是着眼于代码的内部工作,因此不能保证在某个时候不会因为任何原因而改变。

Where:

public BasedOnDescriptor Where(Predicate<Type> accepted)
{
    var descriptor = new BasedOnDescriptor(typeof(object), this, additionalFilters).If(accepted);
    criterias.Add(descriptor);
    return descriptor;
}

Pick:

public BasedOnDescriptor Pick()
{
    return BasedOn<object>();
}
public BasedOnDescriptor BasedOn<T>()
{
    return BasedOn(typeof(T));
}
public BasedOnDescriptor BasedOn(Type basedOn)
{
    var descriptor = new BasedOnDescriptor(basedOn, this, additionalFilters);
    criterias.Add(descriptor);
    return descriptor;
}