温莎城堡中的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());
我想知道这两种组件注册方式之间有什么区别。
如果您查看源代码,您会发现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;
}