Partner Resolvers

Partner Resolvers consists of two different steps, ReceiverPartnerResolver and SenderPartnerResolver. They work the same in that they take the incoming ILinkMessage and returns a result consisting of a list of Partner Ids.
Partner Resolvers are executed as part of the initialize process as the last attempt at resolving partners, if no other way has been successful in finding a partner.

You can have multiple Resolvers active at once on both receiver and sender side. If you have the need to have multipe resolver, be aware that it is not currently possible to control the order in which these will be executed, and the first one that returns a partner will stop the process.

You can set up these resolvers under Developer->System Init Steps. A resolver can have a Config attached to help guide the resolver if necessary.



Code example for a recevier resolver

using Bizbrains.Link.Base;
using Bizbrains.Link.Repositories.Configuration.Partner;
using Microsoft.Extensions.Logging;

namespace RandomReceiverPartner
{
    public class RandomReceiverPartnerStep : ReceiverPartnerResolverBase2<RandomReceiverPartnerConfig>
    {
        public override string StepKeyName => "Find Random Receiver Partner";
        private readonly ILogger<RandomReceiverPartnerStep> logger;
        private readonly IPartnerRepository partnerRepository;

        public RandomReceiverPartnerStep(ILogger<RandomReceiverPartnerStep> logger, IPartnerRepository partnerRepository)
        {
            this.logger = logger;
            this.partnerRepository = partnerRepository;
        }

        public override async Task<ReceiverPartnerResult> LookupReceiverPartners(ILinkMessage message, RandomReceiverPartnerConfig config, IPartnerLookupProvider lookupProvider, CancellationToken cancellationToken)
        {
            var result = new ReceiverPartnerResult();
            var partnerIds = new List<PartnerReference>();
            var allPartners = (await partnerRepository.GetAll()).ToList();

            if (allPartners.Count > 0)
            {
                var randomPartner = allPartners[Random.Shared.Next(allPartners.Count)];
                var partnerReference = new PartnerReference() { PartnerId = randomPartner.Id.Value };
                partnerIds.Add(partnerReference);
            }

            result.ReceiverPartners = partnerIds;
            return result;
        }
    }
}