/// <summary>
        /// Contributes to the specified plan.
        /// </summary>
        /// <param name="plan">The plan that is being generated.</param>
        public void Execute(IPlan plan)
        {
            EventInfo[] events =
                plan.Type.GetEvents(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            foreach (EventInfo evt in events)
            {
                IEnumerable <PublishAttribute> attributes = evt.GetAttributes <PublishAttribute>();

                foreach (PublishAttribute attribute in attributes)
                {
                    plan.Add(new PublicationDirective(attribute.Channel, evt));
                }
            }

            MethodInfo[] methods =
                plan.Type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            foreach (MethodInfo method in methods)
            {
                IEnumerable <SubscribeAttribute> attributes = method.GetAttributes <SubscribeAttribute>();

                foreach (SubscribeAttribute attribute in attributes)
                {
                    MethodInjector injector = InjectorFactory.Create(method);
                    plan.Add(new SubscriptionDirective(attribute.Channel, injector, attribute.Thread));
                }
            }
        }
예제 #2
0
파일: Program.cs 프로젝트: rafntor/bdhero
        private static IKernel CreateInjector()
        {
            var kernel = InjectorFactory.CreateContainer();

            kernel.Get <LogInitializer>().Initialize(LogConfigFileName, Resources.log4net_config);
            kernel.Bind <CLI>().ToSelf();
            return(kernel);
        }
예제 #3
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            InjectorFactory injectorFactory  = new InjectorFactory();
            IFormInjector   makeFormInjector = injectorFactory.MakeFormInjector(new[]
            {
                new DefaultProcessSelector("explorer", Process.GetCurrentProcess().ProcessName, "devenv",
                                           "ApplicationFrameHost", "ScriptedSandbox64")
            });
            MirrorState stateObject = new MirrorState();

            stateObject.Active = false;
            OriginalForm originalForm = new OriginalForm(stateObject, makeFormInjector);

            makeFormInjector.Inject(ptr => new StartMirroringForm(ptr, stateObject, originalForm.StartMirroring, originalForm.StopMirroring));

            Application.Run(originalForm);
        }
예제 #4
0
 public PreInjectionEvent(InjectorFactory factory, List <Injector> injectors)
 {
     InjectorFactory = factory;
     Injectors       = injectors;
 }
예제 #5
0
 public Expression InjectValues(TA a, Expression <Func <TA, TB, bool> > expression)
 {
     return(InjectorFactory.GetInstance().GetInjector <TA, TB>(expression.Body, pe).Inject(a, expression.Body));
 }