Hi,
I'm currently working on an alternative implementation of the TypedFactoryComponentResolver.
My problem is, that I'd like to use typed factories, but I need to return null, in case the component isn't registered.
The concrete usecase is, that I'm looking for a validator for a specific type, and if no validator is registered, it should just return null from the factory.
As the default implementation always throws an exception, if no component is registered, I've created my own version.
/// <summary>
/// Resolves a component. If the component isn't registered, the resolver returns null instead of an exception.
/// </summary>
internal class NullSafeTypedFactoryComponentResolver : TypedFactoryComponentResolver
{
public NullSafeTypedFactoryComponentResolver(string componentName, Type componentType, IDictionary additionalArguments, bool fallbackToResolveByTypeIfNameNotFound, Type actualSelectorType)
: base(componentName, componentType, additionalArguments, fallbackToResolveByTypeIfNameNotFound, actualSelectorType) { }
public override object Resolve(IKernelInternal kernel, IReleasePolicy scope)
{
// Check to see if the component is registered
var hasComponent = componentName != null
? kernel.HasComponent(componentName)
: kernel.HasComponent(componentType);
return hasComponent ? base.Resolve(kernel, scope) : null;
}
}
I'm then overriding the BuildFactoryComponent method from the DefaultTypedFactoryComponentSelector, to return my own implementation.
Since I'm doing something non-standard, I'd just wanted to make sure, I'm not misusing (or misunderstanding) the concept of a typed factory. Basically I'm changing the semantics of the container, so I'm just a bit uncertain about which implications it may bring.
Thanks,
Kenneth