I'm using Autofac. I want to inject a delegate into a class:
public delegate ValidationResult ValidateAddressFunction(Address address);
public class OrderSubmitHandler
{
private readonly ValidateAddressFunction _validateAddress;
public OrderSubmitHandler(ValidateAddressFunction validateAddress)
{
_validateAddress = validateAddress;
}
public void SubmitOrder(Order order)
{
var addressValidation = _validateAddress(order.ShippingAddress);
if(!addressValidation.IsValid)
throw new Exception("Your address is invalid!");
}
}
The implementation of ValidateAddressFunction I want to inject comes from a class that must be resolved from the container because it has dependencies of its own:
public class OrderValidator
{
private readonly ISomeDependency _dependency;
public OrderValidator(ISomeDependency dependency)
{
_dependency = dependency;
}
public ValidationResult ValidateAddress(Address address)
{
// use _dependency
// validate the order
// return a result
return new ValidationResult();
}
}
In this example I'm using a delegate, but I could just as well be injecting Func<Address, ValidationResult>.
I could just inject OrderValidator, but I'd rather not create an interface with just one method. If all my class needs is one method then I'd rather depend directly on that.
How do I register the delegate or Func in such a way that when it's resolved, the class that contains the method will be resolved, and then I can use the method from the resolved instance?