public virtual async Task Intercept_connection_with_multiple_interceptors(bool async)
        {
            var interceptor1 = new TransactionInterceptor();
            var interceptor2 = new WrappingTransactionInterceptor();
            var interceptor3 = new TransactionInterceptor();
            var interceptor4 = new WrappingTransactionInterceptor();

            using (var context = CreateContext(
                       new IInterceptor[]
            {
                new NoOpTransactionInterceptor(), interceptor1, interceptor2
            },
                       new IInterceptor[]
            {
                interceptor3, interceptor4, new NoOpTransactionInterceptor()
            }))
            {
                using (var contextTransaction = async
                    ? await context.Database.BeginTransactionAsync()
                    : context.Database.BeginTransaction())
                {
                    Assert.IsType <WrappedDbTransaction>(contextTransaction.GetDbTransaction());

                    AssertBeginTransaction(context, interceptor1, async);
                    AssertBeginTransaction(context, interceptor2, async);
                    AssertBeginTransaction(context, interceptor3, async);
                    AssertBeginTransaction(context, interceptor4, async);
                }
            }
        }
        public void ShouldAbortTransactionIfExceptionThrown()
        {
            Thrower instance = new Thrower() { ShouldThrowException = true };
            TransactionStatus status = TransactionStatus.InDoubt;
            instance.Completed = (obj, e) =>
            {
                status = e.Transaction.TransactionInformation.Status;
            };

            IInvocation invocation = Substitute.For<IInvocation>();
            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");
            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            try
            {
                TransactionInterceptor interceptor = new TransactionInterceptor();
                interceptor.Intercept(invocation);
                Assert.Fail("An exception should have been thrown.");
            }
            catch (Exception)
            {
                Assert.AreEqual(TransactionStatus.Aborted, status, "The transaction was not abandoned.");
            }
        }
Ejemplo n.º 3
0
        public void ShouldCommitTransactionIfExceptionNotThrown()
        {
            Thrower instance = new Thrower()
            {
                ShouldThrowException = false
            };
            TransactionStatus status = TransactionStatus.InDoubt;

            instance.Completed = (obj, e) =>
            {
                status = e.Transaction.TransactionInformation.Status;
            };

            IInvocation invocation = Substitute.For <IInvocation>();

            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");

            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();

            interceptor.Intercept(invocation);

            Assert.AreEqual(TransactionStatus.Committed, status, "The transaction was not committed.");
        }
Ejemplo n.º 4
0
        public void ShouldAbortTransactionIfExceptionThrown()
        {
            Thrower instance = new Thrower()
            {
                ShouldThrowException = true
            };
            TransactionStatus status = TransactionStatus.InDoubt;

            instance.Completed = (obj, e) =>
            {
                status = e.Transaction.TransactionInformation.Status;
            };

            IInvocation invocation = Substitute.For <IInvocation>();

            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");

            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            try
            {
                TransactionInterceptor interceptor = new TransactionInterceptor();
                interceptor.Intercept(invocation);
                Assert.Fail("An exception should have been thrown.");
            }
            catch (Exception)
            {
                Assert.AreEqual(TransactionStatus.Aborted, status, "The transaction was not abandoned.");
            }
        }
 private static void AssertError(
     DbContext context,
     TransactionInterceptor interceptor,
     bool async)
 {
     Assert.Equal(async, interceptor.AsyncCalled);
     Assert.NotEqual(async, interceptor.SyncCalled);
     Assert.NotEqual(interceptor.AsyncCalled, interceptor.SyncCalled);
     Assert.True(interceptor.FailedCalled);
     Assert.Same(context, interceptor.Context);
 }
Ejemplo n.º 6
0
        public void CheckAutoTransaction_DecoratedIsNotTransactional_NotWrappedInATransaction()
        {
            var interceptor = new TransactionInterceptor();
            var invocation  = Substitute.For <IInvocation>();

            invocation.InvocationTarget.Returns(new SqlComponent());
            invocation.MethodInvocationTarget.Returns(typeof(SqlComponent).GetMethod("ExecuteNonQuery"));
            invocation.Method.Returns(typeof(SqlComponent).GetMethod("ExecuteNonQuery"));
            invocation.When(e => e.Proceed()).Do(e => Nothing());

            interceptor.Intercept(invocation);
            Assert.IsFalse(interceptor.WasTransactional);
        }
Ejemplo n.º 7
0
        public void CheckAutoTransaction_NotDecoratedIsTransactional_WrappedInATransaction()
        {
            var interceptor = new TransactionInterceptor();
            var invocation  = Substitute.For <IInvocation>();

            invocation.InvocationTarget.Returns(new AdministrationComponent());
            invocation.MethodInvocationTarget.Returns(typeof(AdministrationComponent).GetMethod("GetAllDrugs"));
            invocation.Method.Returns(typeof(AdministrationComponent).GetMethod("GetAllDrugs"));
            invocation.When(e => e.Proceed()).Do(e => Nothing());

            interceptor.Intercept(invocation);
            Assert.IsTrue(interceptor.WasTransactional);
        }
Ejemplo n.º 8
0
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            ObjectFactory.Configure(x =>
            {
                x.For <IReportAuthentication>().Use <ReportAuthentication>();
                x.For <IBusinessAuthentication>().Use <BusinessAuthentication>();
                x.For <IAuthenticationRepository>().Use <AuthenticationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessAuthentication>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IBusinessRegistration>().Use <BusinessRegistration>();
                x.For <IRegistrationRepository>().Use <RegistrationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessRegistration>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });



            #region Enquiry

            ObjectFactory.Configure(x =>
            {
                x.For <IEnquiryReport>().Use <EnquiryReport>();
                x.For <IEnquiryRepository>().Use <EnquiryRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IEnquiryReport>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });
            #endregion

            #region CDSS

            ObjectFactory.Configure(x =>
            {
                x.For <IBusinessPOImporting>().Use <BusinessPOImporting>();
                x.For <IPoImportingRepository>().Use <PoImportingRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessPOImporting>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            #endregion
        }
        public void ShouldNotCreateTransactionIfMissingAttribute()
        {
            NoAttribute instance = new NoAttribute();

            IInvocation invocation = Substitute.For<IInvocation>();
            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(NoAttribute).GetMethod("DoSomething");
            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();
            interceptor.Intercept(invocation);

            Assert.IsFalse(instance.HadTransaction, "There should be no active transaction.");
        }
 private static void AssertBeginTransaction(DbContext context, TransactionInterceptor interceptor, bool async)
 {
     Assert.Equal(async, interceptor.AsyncCalled);
     Assert.NotEqual(async, interceptor.SyncCalled);
     Assert.NotEqual(interceptor.AsyncCalled, interceptor.SyncCalled);
     Assert.True(interceptor.StartingCalled);
     Assert.True(interceptor.StartedCalled);
     Assert.False(interceptor.UsedCalled);
     Assert.False(interceptor.CommittingCalled);
     Assert.False(interceptor.CommittedCalled);
     Assert.False(interceptor.RollingBackCalled);
     Assert.False(interceptor.RolledBackCalled);
     Assert.False(interceptor.FailedCalled);
     Assert.Same(context, interceptor.Context);
 }
Ejemplo n.º 11
0
        public void RollbackRules()
        {
            TransactionInterceptor txInterceptor = ctx.GetObject("txRollbackAdvice") as TransactionInterceptor;

            Assert.IsNotNull(txInterceptor);

            MethodInfo getDescriptionMethod          = typeof(ITestObject).GetMethod("GetDescription");
            MethodInfo exceptionalMethod             = typeof(ITestObject).GetMethod("Exceptional");
            ITransactionAttributeSource txAttrSource = txInterceptor.TransactionAttributeSource;
            ITransactionAttribute       txAttr       = txAttrSource.ReturnTransactionAttribute(getDescriptionMethod, typeof(ITestObject));

            Assert.IsTrue(txAttr.RollbackOn(new System.ApplicationException()));

            txAttr = txAttrSource.ReturnTransactionAttribute(exceptionalMethod, typeof(ITestObject));
            Assert.IsFalse(txAttr.RollbackOn(new System.ArithmeticException()));
        }
Ejemplo n.º 12
0
        public void ShouldNotCreateTransactionIfMissingAttribute()
        {
            NoAttribute instance = new NoAttribute();

            IInvocation invocation = Substitute.For <IInvocation>();

            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(NoAttribute).GetMethod("DoSomething");

            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();

            interceptor.Intercept(invocation);

            Assert.IsFalse(instance.HadTransaction, "There should be no active transaction.");
        }
Ejemplo n.º 13
0
        public async Task RunBeforeAnyTests()
        {
            Setup();
            await ClearExisting();
            await AddTestData();

            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <DataStore>(DataStore)
                                    .AddSingleton <InterceptService>();

            serviceCollection.AddEnhancedServiceProvider(provider =>
            {
                var interceptor = new TransactionInterceptor(DataStore);
                provider.AddInterceptor <TransactionRequiredAttribute>(interceptor.Interceptor);
            });

            serviceProvider = serviceCollection.BuildServiceProvider();
        }
        public void ShouldCommitTransactionIfExceptionNotThrown()
        {
            Thrower instance = new Thrower() { ShouldThrowException = false };
            TransactionStatus status = TransactionStatus.InDoubt;
            instance.Completed = (obj, e) =>
                {
                    status = e.Transaction.TransactionInformation.Status;
                };

            IInvocation invocation = Substitute.For<IInvocation>();
            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");
            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();
            interceptor.Intercept(invocation);

            Assert.AreEqual(TransactionStatus.Committed, status, "The transaction was not committed.");
        }
Ejemplo n.º 15
0
        static InterfaceFactoryConfig()
        {
            ObjectFactory.Configure(x =>
            {
                x.For <IBusinessRegistration>().Use <BusinessRegistration>();
                x.For <IRegistrationRepository>().Use <RegistrationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessRegistration>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });
            ObjectFactory.Configure(x =>
            {
                x.For <IReportAuthentication>().Use <ReportAuthentication>();
                x.For <IAuthenticationRepository>().Use <AuthenticationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessRegistration>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x => x.For <IInterfaceFactory>().Use <ControllerFactory>());
            ////x.For<IInterfaceFactory>().Use<GatewayFactory>();
        }
        public virtual async Task Intercept_connection_with_multiple_interceptors(bool async)
        {
            var interceptor1 = new TransactionInterceptor();
            var interceptor2 = new WrappingTransactionInterceptor();
            var interceptor3 = new TransactionInterceptor();
            var interceptor4 = new WrappingTransactionInterceptor();

            using var context = CreateContext(
                      new IInterceptor[] { new NoOpTransactionInterceptor(), interceptor1, interceptor2 },
                      new IInterceptor[] { interceptor3, interceptor4, new NoOpTransactionInterceptor() });
            using var listener           = Fixture.SubscribeToDiagnosticListener(context.ContextId);
            using var contextTransaction = async
                ? await context.Database.BeginTransactionAsync()
                : context.Database.BeginTransaction();

            Assert.IsType <WrappedDbTransaction>(contextTransaction.GetDbTransaction());

            AssertBeginTransaction(context, interceptor1, async);
            AssertBeginTransaction(context, interceptor2, async);
            AssertBeginTransaction(context, interceptor3, async);
            AssertBeginTransaction(context, interceptor4, async);

            AssertBeginTransactionEvents(listener);
        }
Ejemplo n.º 17
0
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            ObjectFactory.Configure(x =>
            {
                x.For <IReportAuthentication>().Use <ReportAuthentication>();
                x.For <IBusinessAuthentication>().Use <BusinessAuthentication>();
                x.For <IAuthenticationRepository>().Use <AuthenticationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessAuthentication>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IBusinessRegistration>().Use <BusinessRegistration>();
                x.For <IRegistrationRepository>().Use <RegistrationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessRegistration>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportVendorMaster>().Use <ReportVendorMaster>();
                x.For <IBusinessVendorMaster>().Use <BusinessVendorMaster>();
                x.For <IVendorMasterRepository>().Use <VendorMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessVendorMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IBusinessCompanyMaster>().Use <BusinessCompanyMaster>();
                x.For <IReportCompanyMaster>().Use <ReportCompanyMaster>();
                x.For <ICompanyMastersRepository>().Use <CompanyMastersRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessCompanyMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportCategoryMaster>().Use <ReportCategoryMaster>();
                x.For <ICategoryMasterRepository>().Use <CategoryMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IReportCategoryMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportMaterialMaster>().Use <ReportMaterialMaster>();
                x.For <IBusinessMaterialMaster>().Use <BusinessMaterialMaster>();
                x.For <IMaterialMasterRepository>().Use <MaterialMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessMaterialMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportOperationMaster>().Use <ReportOperationMaster>();
                x.For <IBusinessOperationMaster>().Use <BusinessOperationMaster>();
                x.For <IOperationMasterRepository>().Use <OperationMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessOperationMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportToolsMaster>().Use <ReportToolsMaster>();
                x.For <IBusinessToolsMaster>().Use <BusinessToolsMaster>();
                x.For <IToolsMasterRepository>().Use <ToolsMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessToolsMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportJigsMaster>().Use <ReportJigsMaster>();
                x.For <IBusinessJigsMaster>().Use <BusinessJigsMaster>();
                x.For <IJigsMasterRepository>().Use <JigsMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessJigsMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportParameterMaster>().Use <ReportParameterMaster>();
                x.For <IBusinessParameterMaster>().Use <BusinessParameterMaster>();
                x.For <IParameterMasterRepository>().Use <ParameterMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessParameterMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });
            ObjectFactory.Configure(x =>
            {
                x.For <IReportSubcontractProcessMaster>().Use <ReportSubcontractProcessMaster>();
                x.For <IBusinessSubcontractProcessMaster>().Use <BusinessSubcontractProcessMaster>();
                x.For <ISubcontractProcessMasterRepository>().Use <SubcontractProcessMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessSubcontractProcessMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportSymbolMaster>().Use <ReportSymbolMaster>();
                x.For <IBusinessSymbolMaster>().Use <BusinessSymbolMaster>();
                x.For <ISymbolMasterRepository>().Use <SymbolMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessSymbolMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportPartMaster>().Use <ReportPartMaster>();
                x.For <IBusinessPartMaster>().Use <BusinessPartMaster>();
                x.For <IPartMasterRepository>().Use <PartMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessPartMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportMachineMaster>().Use <ReportMachineMaster>();
                x.For <IBusinessMachineMaster>().Use <BusinessMachineMaster>();
                x.For <IMachineMasterRepository>().Use <MachineMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessMachineMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportInstrumentMaster>().Use <ReportInstrumentMaster>();
                x.For <IBusinessInstrumentMaster>().Use <BusinessInstrumentMaster>();
                x.For <IInstrumentMasterRepository>().Use <InstrumentMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessInstrumentMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            #region Sales

            ObjectFactory.Configure(x =>
            {
                x.For <IReportWorkOrder>().Use <ReportWorkOrder>();
                x.For <IBusinessWorkOrder>().Use <BusinessWorkOrder>();
                x.For <IWorkOrderRepository>().Use <WorkOrderRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IReportWorkOrder>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            #endregion

            #region Despatch

            ObjectFactory.Configure(x =>
            {
                x.For <IReportDeliveryChallan>().Use <ReportDeliveryChallan>();
                x.For <IBusinessDeliveryChallan>().Use <BusinessDeliveryChallan>();
                x.For <IDeliveryChallanRepository>().Use <DeliveryChallanRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IReportDeliveryChallan>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportInvoice>().Use <ReportInvoice>();
                x.For <IBusinessInvoice>().Use <BusinessInvoice>();
                x.For <IInvoiceRepository>().Use <InvoiceRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                //x.For<IReportInvoice>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
                x.For <IBusinessInvoice>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            #endregion

            #region Prodution
            ObjectFactory.Configure(x =>
            {
                x.For <IReportProcessCard>().Use <ReportProcessCard>();
                x.For <IBusinessProcessCard>().Use <BusinessProcessCard>();
                x.For <IProcessCardRepository>().Use <ProcessCardRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IReportProcessCard>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportJobCardGeneration>().Use <ReportJobCardGeneration>();
                x.For <IBusinessJobCardGeneration>().Use <BusinessJobCardGeneration>();
                x.For <IJobCardGenerationRepository>().Use <JobCardGenerationRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                //x.For<IReportJobCardGeneration>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
                x.For <IBusinessJobCardGeneration>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            ObjectFactory.Configure(x =>
            {
                x.For <IReportEmployeeMaster>().Use <ReportEmployeeMaster>();
                x.For <IEmployeeMasterRepository>().Use <EmployeeMasterRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IReportEmployeeMaster>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            #endregion

            #region Sub Contract
            ObjectFactory.Configure(x =>
            {
                x.For <IReportSubContract>().Use <ReportSubContract>();
                x.For <IBusinessSubContract>().Use <BusinessSubContract>();
                x.For <ISubContractRepository>().Use <SubContractRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IReportSubContract>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });
            #endregion

            #region Enquiry

            ObjectFactory.Configure(x =>
            {
                x.For <IEnquiryReport>().Use <EnquiryReport>();
                x.For <IEnquiryRepository>().Use <EnquiryRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IEnquiryReport>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });
            #endregion

            #region Stores

            ObjectFactory.Configure(x =>
            {
                x.For <IReportGatePass>().Use <ReportGatePass>();
                x.For <IBusinessGatePass>().Use <BusinessGatePass>();
                x.For <IGatePassRepository>().Use <GatePassRepository>();
                var proxyGenerator         = new ProxyGenerator();
                var transactionInterceptor = new TransactionInterceptor();
                x.For <IBusinessGatePass>().EnrichAllWith(instance => proxyGenerator.CreateInterfaceProxyWithTarget(instance, transactionInterceptor));
            });

            #endregion
        }
 public AboutController(TransactionInterceptor transactionInterceptor)
 {
     _transactionInterceptor = transactionInterceptor;
 }