Autofa c Круговая зависимость компонента в C# Asp. net Mvc - PullRequest
0 голосов
/ 05 марта 2020

Я хочу реализовать Autofa c для моего Контроллера Закупок (). Как и другие мои контроллеры, я зарегистрировал зависимости в Global.asax. И работает как положено. Но для компонента CustomersController () исключение циклической зависимости компонента происходит для FiscalYearManager. Стоит отметить, что все работает нормально, если я не использую Autofa c для этого контроллера. Я поместил скриншот этой ошибки и загрузил необходимые коды, связанные с этим. Пожалуйста, просмотрите и помогите мне решить эту проблему. enter image description here

Global.asax -> Application_Start ()

var builder = new ContainerBuilder();

        // MVC - Register Controllers
        builder.RegisterType<ProductsController>().InstancePerRequest();
        builder.RegisterType<PurchasesController>().InstancePerRequest();
        builder.RegisterType<SalesController>().InstancePerRequest();

        // MVC - OPTIONAL: Register model binders that require DI.
        builder.RegisterModelBinders(typeof(MvcApplication).Assembly);
        builder.RegisterModelBinderProvider();

        // MVC - OPTIONAL: Register web abstractions like HttpContextBase.
        builder.RegisterModule<AutofacWebTypesModule>();

        // MVC - OPTIONAL: Enable property injection in view pages.
        builder.RegisterSource(new ViewRegistrationSource());

        // MVC - OPTIONAL: Enable property injection into action filters.
        builder.RegisterFilterProvider();
// Register application dependencies for PurchaseController
        builder.RegisterType<PurchaseManager>().As<IPurchaseManager>();
        builder.RegisterType<GeneralInventoryManager>().As<IGeneralInventoryManager>();
        builder.RegisterType<ServiceCenterInventoryManager>().As<IServiceCenterInventoryManager>();
        builder.RegisterType<PurchaseBatchPaymentManager>().As<IPurchaseBatchPaymentManager>();
        builder.RegisterType<PartyManager>().As<IPartyManager>();
        builder.RegisterType<PurchaseFileManager>().As<IPurchaseFileManager>();            
        builder.RegisterType<ProductCategoryManager>().As<IProductCategoryManager>();
        builder.RegisterType<PosPurchaseFileManager>().As<IPosPurchaseFileManager>();
        builder.RegisterType<PosPurchasePaymentManager>().As<IPosPurchasePaymentManager>();
        builder.RegisterType<CategoryManager>().As<ICategoryManager>();
        builder.RegisterType<ItemManager>().As<IItemManager>();
        builder.RegisterType<PurchaseOrderManager>().As<IPurchaseOrderManager>();
        builder.RegisterType<FiscalYearManager>().As<IFiscalYearManager>().SingleInstance()
        .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

PurchasesController ()

private readonly LoaderUtility _loaderUtility;
    private readonly IPurchaseManager _iManager;
    private readonly IGeneralInventoryManager _iGeneralInventoryManager;
    private readonly IServiceCenterInventoryManager _iServiceCenterInventoryManager;
    private readonly IPurchaseBatchPaymentManager _iPurchaseBatchPaymentManager;
    private readonly IPartyManager _iPartyManager;
    private readonly IPurchaseFileManager _iPurchaseFileManager;
    private readonly IFiscalYearManager _iFiscalYearManager;
    private readonly IProductCategoryManager _iProductCategoryManager;
    private readonly IPosPurchaseFileManager _iPosPurchaseFileManager;
    private readonly IPosPurchasePaymentManager _iPosPurchasePaymentManager;
    private readonly ICategoryManager _iCategoryManager;
    private readonly IItemManager _iItemManager;
    private readonly IPurchaseOrderManager _iPurchaseOrderManager;


    public PurchasesController(IItemManager itemManager,
        LoaderUtility loaderUtility,
        IPurchaseManager purchaseManager,
        IGeneralInventoryManager iGeneralInventoryManager,
        IServiceCenterInventoryManager iServiceCenterInventoryManager,
        IPurchaseBatchPaymentManager iPurchaseBatchPaymentManager,
        IPartyManager iPartyManager, 
        IFiscalYearManager iFiscalYearManager,
        IProductCategoryManager iProductCategoryManager,
        IPosPurchaseFileManager iPosPurchaseFileManager,
        IPosPurchasePaymentManager iPosPurchasePaymentManager,
        ICategoryManager iCategoryManager,
        IPurchaseOrderManager purchaseOrderManager
        )
    {
        _loaderUtility = loaderUtility;
        _iManager = purchaseManager;
        _iGeneralInventoryManager = iGeneralInventoryManager;
        _iPurchaseBatchPaymentManager = iPurchaseBatchPaymentManager;
        _iPartyManager = iPartyManager;
        _iFiscalYearManager = iFiscalYearManager;
        _iItemManager = itemManager;
        _iProductCategoryManager = iProductCategoryManager;
        _iPosPurchaseFileManager = iPosPurchaseFileManager;
        _iPosPurchasePaymentManager = iPosPurchasePaymentManager;
        _iCategoryManager = iCategoryManager;
        _iPurchaseOrderManager = purchaseOrderManager;
        _iServiceCenterInventoryManager = iServiceCenterInventoryManager;
    }

PurchaseManager ()

private readonly IPurchaseRepository _iRepository;
    private readonly IVatConfManager _iVatConfManager;
    private readonly ITaxConfManager _iTaxConfManager;
    private readonly IInventoryAccountConfRepository _inventoryAccountConfRepository;
    private readonly IPosPurchasePaymentManager _iPosPurchasePaymentManager;
    private readonly IPurchaseDetailsManager _iPurchaseDetailsManager;
    private readonly IGeneralInventoryManager _iInventoryManager;
    private readonly IServiceCenterInventoryManager _iServiceCenterInventoryManager;
    private readonly IVoucherManager _iVoucherManager;
    private readonly IJournalCategoryManager _iJournalCategoryManager;
    private readonly ICategoryRepository _iCategoryRepository;
    private readonly IFiscalYearManager _iFiscalYearManager;
    private readonly PosVoucherGenerateManager _voucherGenerateManager;

    public PurchaseManager()
    {
        _iRepository = new PurchaseRepository();
        _iVatConfManager = new VatConfigurationManager();
        _iTaxConfManager = new TaxConfigurationManager();
        _inventoryAccountConfRepository = new InventoryAccountConfRepository();
        _iFiscalYearManager = new FiscalYearManager();
        _iCategoryRepository = new CategoryRepository();
        _iJournalCategoryManager = new JournalCategoryManager();
        _iPosPurchasePaymentManager = new PosPurchasePaymentManager();
        _iInventoryManager = new GeneralInventoryManager();
        _iServiceCenterInventoryManager = new ServiceCenterInventoryManager();
        _iPurchaseDetailsManager = new PurchaseDetailsManager();
        _iVoucherManager = new VoucherManager();
        _voucherGenerateManager = new PosVoucherGenerateManager();

    }

    public PurchaseManager(IPurchaseRepository iReporitory,
        IGeneralInventoryManager inventoryManager,
        IServiceCenterInventoryManager serviceCentreInventoryManager,
        IPurchaseDetailsManager iPurchaseDetailsManager,
        IPosPurchasePaymentManager iPosPurchasePaymentManager,
        IJournalCategoryManager iJournalCategoryManager,
        ICategoryRepository iCategoryRepository,
        IVatConfManager iVatConfManager,
        ITaxConfManager iTaxConfManager,
        IFiscalYearManager iFiscalYearManager,
        IPurchaseBatchPaymentManager iBatchPaymentManager)
    {
        this._iRepository = iReporitory;
        _iVatConfManager = iVatConfManager;
        _iTaxConfManager = iTaxConfManager;
        this._iInventoryManager = inventoryManager;
        this._iServiceCenterInventoryManager = serviceCentreInventoryManager;
        _iPurchaseDetailsManager = iPurchaseDetailsManager;
        _iPosPurchasePaymentManager = iPosPurchasePaymentManager;
        _iJournalCategoryManager = iJournalCategoryManager;
        _iCategoryRepository = iCategoryRepository;
        _iFiscalYearManager = iFiscalYearManager;
    }

IFiscalYearManager ()

public interface IFiscalYearManager : IManager<FiscalYear>
{
    ICollection<FiscalYear> Search(FiscalYearSearchVm model);
    bool CheckFiscalYear(FiscalYear entity);
    FiscalYear GetCurrentFiscalYear();
    bool IsDateInFiscalYear(DateTime? date);
}
...