The requested service 'ReadSessionIdentityFlow (bla.bla.BusinessFlow.Base.IBaseFlow)' has not been registered

13 Views Asked by At

I am getting the following exception:

The exception is very straightforward. It says I have not registered the component. I went through the code, to see what I have done wrong. I don't spot anything that's wrong :( Can someone help me identify what I did wrong and how to resolve it?

Autofac.Core.Registration.ComponentNotRegisteredException: The requested service ReadSessionIdentityFlow (bla.blaBusinessFlow.Base.IBaseFlow) has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.

See https://autofac.rtfd.io/help/service-not-registered for more info.

namespace GOAL.WMS.BusinessFlow.Base
{
    public interface IBaseFlow
    {
        List<StepInfo> StepList { get; }

        void Execute(IGoalWmsUnitOfWork uow, CancellationToken? cancellationToken);

    }
}
namespace GOAL.WMS.BusinessFlow.Base
{
    public abstract class BaseFlow : IBaseFlow
    {
        private List<StepInfo> stepList = new List<StepInfo>();
        public List<StepInfo> StepList { get { return stepList; } }
        private IGoalWmsUnitOfWork uow;
        private CancellationToken? cancellationToken = null;
        private string CommitActionGuid = Guid.NewGuid().ToString();

    }
}
namespace GOAL.WMS.BusinessFlow.AuthorizationManagement.Employee.Flows
{
    public class CheckEmployeeIsAdminFlow : BaseFlow
    {
        private IBaseFlow getDeepEmployeeGroupMemberFlow;
        private IBaseFlow getRoleMemberByEmployeeFlow;
        private IBaseFlow getDeepRoleHierarchyFlow;
        private IBaseFlow readGoalParameterFlow;

    }
}
namespace GOAL.WMS.BusinessFlow.AuthorizationManagement.Session.Flows
{
    public class ReadSessionIdentityFlow : BaseFlow
    {
        private IBaseStep readSessionIdentityStep;
        private IBaseFlow checkEmployeeIsAdminFlow;
        private IBaseFlow readGoalParameterFlow;
        private IBaseFlow getEmployeeClientFlow;
        private IBaseFlow readRowBasedSecurityDataFlow;
    }
}
//MY REGISTRATION METHOD
 string pathx = System.AppDomain.CurrentDomain.BaseDirectory + "\\GOAL.WMS.BusinessFlow.dll";
 Assembly asmx = Assembly.LoadFile(pathx);

var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(asmx)
       .Where(t => t.GetInterfaces().Contains(typeof(IBaseFlow)))
       .Named<BaseFlow>(t => t.Name).AsSelf();

There are hundreds of classes that have inherited the BaseFlow class, which is similar to the CheckEmployeeIsAdminFlow and ReadSessionIdentityFlow classes. How can I register these hundreds of classes with autofac?

I tried a few register methods in the above codes, unfortunately I got the above error

but if I give the concrete classes one by one like the method below, it registers and can resolve.

builder.RegisterType(typeof(ReadSessionIdentityFlow)).Named(typeof(ReadSessionIdentityFlow).Name, typeof(IBaseFlow)).InstancePerLifetimeScope();
    builder.RegisterType(typeof(ReadSessionIdentityStep)).Named(typeof(ReadSessionIdentityStep).Name, typeof(IBaseStep)).InstancePerLifetimeScope();
    builder.RegisterType(typeof(CheckEmployeeIsAdminFlow)).Named(typeof(CheckEmployeeIsAdminFlow).Name, typeof(IBaseFlow)).InstancePerLifetimeScope();

Of course I shouldn't register of them one by one like this

0

There are 0 best solutions below