Exemplo n.º 1
0
        private void SetInterceptionBehaviorFor(Type typeToIntercept, Type typeOfInstance, string name)
        {
            if (!AllMatchingRulesApply(typeToIntercept, typeOfInstance))
            {
                return;
            }

            if (!TypeIsInterface(typeToIntercept))
            {
                return;
            }

            if (_interceptor.CanIntercept(typeOfInstance))
            {
                Container.Configure <unity.Interception>().SetDefaultInterceptorFor(typeOfInstance, _interceptor);
            }

            else if (_interceptor.CanIntercept(typeToIntercept))
            {
                Container.Configure <unity.Interception>().SetDefaultInterceptorFor(typeToIntercept, _interceptor);
            }

            _behaviors.ForEach(b =>
            {
                var interceptionBehavior = new InterceptionBehavior(b);
                interceptionBehavior.AddPolicies(typeToIntercept, typeOfInstance, name, Context.Policies);
            });
        }
Exemplo n.º 2
0
        public static void Main(string[] args)
        {
            var container = new UnityContainer();

            container.AddNewExtension <NotifyPropertyChangedExt>();
            container.AddNewExtension <Interception>();

            var interceptor          = new Interceptor <InterfaceInterceptor>();
            var interceptionBehavior = new InterceptionBehavior <NotifyPropertyChangedBehavior>();

            container.RegisterType <IViewModel, ViewModel>(interceptor, interceptionBehavior);

            var viewModel = container.Resolve <IViewModel>();

            viewModel.HookPropertyChanged((s, e) =>
            {
                Console.WriteLine("This is called because the PropertyChanged event handler is attached from out side of the ViewModel");
            });
            viewModel.Name = "1";

            var autoViewModel = container.Resolve <AutoViewModel>();

            autoViewModel.HookPropertyChanged((s, e) =>
            {
                Console.WriteLine("This is called");
            });
            autoViewModel.Name = "1";
        }
        public override void PreBuildUp(IBuilderContext context)
        {
            Guard.ArgumentNotNull(context, "context");
            if (!this.CanIntercept(context))
            {
                return;
            }
            IInstanceInterceptionPolicy interceptionPolicy = FindInterceptionPolicy <IInstanceInterceptionPolicy>(context, true);

            if (null == interceptionPolicy)
            {
                IInstanceInterceptor interceptor = context.NewBuildUp <IInterceptor>(typeof(IInterceptor).AssemblyQualifiedName) as IInstanceInterceptor;
                if (null == interceptor)
                {
                    return;
                }
                if (!interceptor.CanIntercept(context.BuildKey.Type))
                {
                    return;
                }
                context.Policies.Set <IInstanceInterceptionPolicy>(new FixedInstanceInterceptionPolicy(interceptor), context.BuildKey);
                context.Policies.Clear <ITypeInterceptionPolicy>(context.BuildKey);
            }

            IInterceptionBehaviorsPolicy interceptionBehaviorsPolicy = FindInterceptionPolicy <IInterceptionBehaviorsPolicy>(context, true);

            if (null == interceptionBehaviorsPolicy)
            {
                var policyInjectionBehavior = new InterceptionBehavior <PolicyInjectionBehavior>();
                policyInjectionBehavior.AddPolicies(context.OriginalBuildKey.Type, context.BuildKey.Type, context.BuildKey.Name, context.Policies);
            }
        }
Exemplo n.º 4
0
        public IUnityContainer GetInstance()
        {
            UnityContainer container = new UnityContainer();

            container.AddNewExtension <Interception>();

            Interceptor          interceptor          = new Interceptor(new InterfaceInterceptor());
            InterceptionBehavior interceptionBehavior = CreateInterceptionBehavior();

            // Envios
            container.RegisterType <IEnvioRepository, EnvioRepository>(interceptor, interceptionBehavior);
            container.RegisterType <IEnvioService, EnvioService>(interceptor, interceptionBehavior);

            // Paquetes
            container.RegisterType <IPaqueteRepository, PaqueteRepository>(interceptor, interceptionBehavior);
            container.RegisterType <IPaqueteService, PaqueteService>(interceptor, interceptionBehavior);

            // Conversores
            PaqueteConversor paqueteConversor = new PaqueteConversor();
            EnvioConversor   envioConversor   = new EnvioConversor(paqueteConversor);

            container.RegisterInstance(typeof(PaqueteConversor), paqueteConversor);
            container.RegisterInstance(typeof(EnvioConversor), envioConversor);

            // dbFactory

            container.RegisterType <IPaqDBFactory, PaqDBFactory>();
            return(container);
        }
        /// <summary>
        /// Add policies to the <paramref name="policies"/> to configure the container with
        /// an appropriate <see cref="IInstanceInterceptionPolicy"/>
        /// </summary>
        /// <param name="serviceType">Type of the interface being registered. This parameter is
        /// ignored by this class.</param>
        /// <param name="implementationType">Type to register.</param>
        /// <param name="name">Name used to resolve the type object.</param>
        /// <param name="policies">Policy list to add policies to.</param>
        public override void AddPolicies(Type serviceType, Type implementationType, string name, IPolicyList policies)
        {
            var key = new NamedTypeBuildKey(implementationType);

            policies.Set <IInstanceInterceptionPolicy>(new FixedInstanceInterceptionPolicy(Interceptor), key);

            var piabInjectionMember = new InterceptionBehavior <PolicyInjectionBehavior>();

            piabInjectionMember.AddPolicies(serviceType, implementationType, name, policies);
        }
Exemplo n.º 6
0
        private static void InitialFactories()
        {
            var policy     = new InterceptionBehavior <PolicyInjectionBehavior>();
            var intercptor = new Interceptor <TransparentProxyInterceptor>();
            var type       = typeof(ServiceFactory);

            Container.Current.RegisterType(
                typeof(IServiceFactory),
                type,
                new ContainerControlledLifetimeManager(),
                policy,
                intercptor
                );
        }
Exemplo n.º 7
0
        public static IUnityContainer RegisterComponents()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();

            var interceptor = new Interceptor <InterfaceInterceptor>();
            var behaver     = new InterceptionBehavior <LoggingInterceptionBehavior>();

            container.RegisterType <DbContext, DatabaseContext>(new HierarchicalLifetimeManager());

            container.RegisterType(typeof(IRepository <>), typeof(EfRepository <>));

            return(container);
        }
Exemplo n.º 8
0
        protected override void Initialize()
        {
            string loggerName = "liteLoggingBehavior";
            var    ii         = new Interceptor <InterfaceInterceptor>();
            var    lb         = new InterceptionBehavior <MethodInvokeLoggingBehavior>(loggerName);
            var    tb         = new InterceptionBehavior <MethodIdentificationBehavior>();

            if (!Container.IsRegistered <IUowFactory>())
            {
                Container
                .RegisterType <IUowFactory, UowFactory>(new ContainerControlledLifetimeManager(), ii, lb);
            }

            if (!Container.IsRegistered <IDateProvider>())
            {
                Container
                .RegisterType <IDateProvider, DateProvider>(new ContainerControlledLifetimeManager(), ii, lb);
            }

            if (!Container.IsRegistered <IUserApplicationRepository>())
            {
                Container.AddNewExtension <UserExtension>();
            }

            Container.RegisterFactory <IUnitOfWork>(c => c.Resolve <IUowFactory>().CreateUow(), FactoryLifetime.PerResolve);

            Container
            .AddNewExtension <Interception>()
            .RegisterMethodInvokeLoggingBehavior(loggerName, "Debug")
            .RegisterMethodIdentificationBehavior("pid")
            .RegisterType <IApplicationService, ApplicationService>("applicationService", ii, lb)
            .RegisterType <IApplicationService, UserValidationApplicationService>(
                "userValidationApplicationService",
                new InjectionConstructor(
                    new ResolvedParameter <IApplicationService>("applicationService"),
                    typeof(IUserContextRepository),
                    typeof(IUserApplicationRepository)
                    ), ii, lb)
            .RegisterType <IApplicationService, ManageDbConnectionApplicationService>(
                new InjectionConstructor(
                    new ResolvedParameter <IApplicationService>("userValidationApplicationService"),
                    typeof(IUnitOfWork)
                    ), ii, lb)
            .RegisterType <IMapper <ApplicationListItemDbDto, ApplicationListItemDto>, ApplicationListItemDbDtoMapper>(new ContainerControlledLifetimeManager(), ii, lb)
            .RegisterType <IApplicationRepository, ApplicationRepository>(ii, lb)
            .RegisterType <IFileRepository, FileRepository>(ii, lb)
            ;
        }
    private void OnRegister(object sender, RegisterEventArgs e)
    {
        if (ShouldIntercept(e))
        {
            IUnityContainer container = sender as IUnityContainer;

            var i = new Interceptor <InterfaceInterceptor>();
            i.AddPolicies(e.TypeFrom, e.TypeTo, e.Name, Context.Policies);
            behaviors.ForEach((b) =>
            {
                var ib = new InterceptionBehavior(b);
                ib.AddPolicies(e.TypeFrom, e.TypeTo, e.Name, Context.Policies);
            }
                              );
        }
    }
Exemplo n.º 10
0
        private InjectionMember[] GetInjectionMembers(IInterceptionBehavior[] interceptors)
        {
            InjectionMember[] injectionMember = null;

            if (interceptors != null && interceptors.Length > 0)
            {
                injectionMember    = new InjectionMember[interceptors.Length + 1];
                injectionMember[0] = new Interceptor <VirtualMethodInterceptor>();

                for (int i = 0; i < interceptors.Length; i++)
                {
                    injectionMember[i + 1] = new InterceptionBehavior(interceptors[i]);
                }
            }

            return(injectionMember);
        }
Exemplo n.º 11
0
        private static void RegisterDependencies(IUnityContainer container)
        {
            var ii = new Interceptor <InterfaceInterceptor>();

            var log = new InterceptionBehavior <MethodLogInterceptionBehavior>("log");
            var pid = new InterceptionBehavior <MethodIdentityInterceptionBehavior>("pid");

            container
            .AddNewExtension <Interception>()

            .RegisterMethodLogInterceptionBehavior <Log4netLogListenerFactory>("log", "Debug")
            .RegisterMethodIdentityInterceptionBehavior <Log4netLogContext>("pid", "pid")

            .RegisterType <IDemoApp, DemoApp>(ii, pid, log)
            .RegisterType <IHelloWorldService, HelloWorldService>(ii, pid, log)
            .RegisterType <IHelloService, HelloService>(ii, pid, log)
            .RegisterType <IWorldService, WorldService>(ii, pid, log);
        }
        /// <summary>
        /// The on register.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        private void OnRegister(object sender, RegisterEventArgs e)
        {
            if (this.InterceptionBehaviors != null && this.InterceptionBehaviors.Count > 0)
            {
                var container = sender as IUnityContainer;

                if (e != null && e.TypeFrom != null && e.TypeFrom.IsInterface && !e.TypeFrom.IsAssignableFrom(typeof(ICallHandler)))
                {
                    var interception = container.Configure <Interception>().SetInterceptorFor(e.TypeFrom, e.Name, new InterfaceInterceptor());

                    var behaviorsToAdd = this.InterceptionBehaviors.Where(b => b.ShouldIntercept(e));
                    foreach (var interceptConfig in behaviorsToAdd)
                    {
                        foreach (var interceptionBehavior in interceptConfig.InterceptionBehaviors)
                        {
                            var unityBehavior = new InterceptionBehavior(interceptionBehavior);
                            unityBehavior.AddPolicies(e.TypeFrom, e.TypeTo, e.Name, this.Context.Policies);
                        }
                    }
                }
            }
        }
Exemplo n.º 13
0
        public static IUnityContainer RegisterComponents()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();

            var interceptor = new Interceptor <InterfaceInterceptor>();
            var behaver     = new InterceptionBehavior <LoggingInterceptionBehavior>();

            container.RegisterType <DbContext, DatabaseContext>(new HierarchicalLifetimeManager());
            container.RegisterType <IdentityDbContext <ApplicationUser>, DatabaseContext>(new PerResolveLifetimeManager());

            container.RegisterType(typeof(IRepository <>), typeof(EfRepository <>));


            container.RegisterType <IInstitutionService, InstitutionService>(interceptor, behaver);
            container.RegisterType <IHtmlContentService, HtmlContentService>(interceptor, behaver);
            container.RegisterType <INotificationService, NotificationService>(interceptor, behaver);
            container.RegisterType <IProposalService, ProposalService>(interceptor, behaver);
            container.RegisterType <IApplicationAccountService, ApplicationAccountService>(interceptor, behaver);
            container.RegisterType <INotificationService, NotificationService>(interceptor, behaver);

            return(container);
        }