コード例 #1
0
        public void ShouldErrorIfMissingRootType()
        {
            Diagnostics    diags          = null;
            InjectionState injectionState = null;
            int            ii;

            try
            {
                (ii, injectionState) = new DependencyInjector().CreateAndInjectDependencies <int>();
                Assert.Fail();
            }
            catch (DIException iex)
            {
                diags = iex.Diagnostics;
                Assert.IsTrue(diags.HasWarnings);
                dynamic diagnostic = diags.Groups["MissingRoot"]?.Occurrences[0];
                Assert.AreEqual("System.Int32", diagnostic.BeanType);
                Assert.AreEqual("", diagnostic.BeanName);
            }
            catch (Exception ex)
            {
                var dx = ex;
                Assert.Fail();
            }
        }
コード例 #2
0
        private static void OnGameInjectionStateChange(GameType gameType, InjectionState injectionState)
        {
            if (injectionState != InjectionState.Injected)
            {
                return;
            }
            if (!config.TryGetValue(gameType.ToString(), out var subConfig))
            {
                subConfig = new Dictionary <string, object>();
            }
            if (Logger.DebugMode)
            {
                subConfig["debug"] = true;
            }
            else
            {
                subConfig.Remove("debug");
            }
            string jsonConfig = JsonConvert.SerializeObject(subConfig);

            if (ProcessMonitor.SendCommand(gameType, CommandType.Config, jsonConfig, 10000) != "Done")
            {
                if (ProcessMonitor.SendCommand(gameType, CommandType.Config, jsonConfig, 5000) != "Done")
                {
                    Logger.LogError("Unable to send config to in-game UI");
                }
            }
        }
コード例 #3
0
            public (object bean, InjectionState injectionState) Execute(InjectionState injectionState
                                                                        , BeanFactoryArgs args)
            {
                int x = ((string)null).Length;

                return("", injectionState);
            }
コード例 #4
0
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     object[] @params = (object[])args.FactoryParmeter;
     //Assert(@params.Length == 2);
     //Assert(@params[0] is Type);
     //Assert(@params[1] is String);
     return(GetResourceAsString(@params[0] as Type, @params[1] as String), injectionState);
 }
コード例 #5
0
 public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     object[] @params = (object[])args.FactoryParmeter;
     Assert(@params.Length == 2);
     Assert(@params[0] is Type);
     Assert(@params[1] is String);
     return(ConvertResourceToXPathNavigator(@params[0] as Type, @params[1] as String), injectionState);
 }
コード例 #6
0
ファイル: ProviderFactory.cs プロジェクト: mikedamay/PureDI
 public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     if (System.Environment.GetCommandLineArgs().Length > 1)
     {
         return(iocContainer.CreateAndInjectDependencies <FileListProvider>(injectionState));
     }
     else
     {
         return(iocContainer.CreateAndInjectDependencies <UsageListProvider>(injectionState, rootBeanSpec: new RootBeanSpec(rootBeanName: "usage")));
     }
 }
コード例 #7
0
ファイル: DisplayFactory.cs プロジェクト: mikedamay/PureDI
 public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     if (System.Diagnostics.Debugger.IsAttached)
     {
         return(iocContainer.CreateAndInjectDependencies <VSOutputWindow>(injectionState
                                                                          , rootBeanSpec: new RootBeanSpec(rootBeanName: "outputWindow")));
     }
     else
     {
         return(iocContainer.CreateAndInjectDependencies <ConsoleDisplay>(injectionState));
     }
 }
コード例 #8
0
            public void Reset()
            {
                SocketStreamClient.Stop();
                InjectionState   = InjectionState.Idle;
                InjectionAttempt = 0;
                Process          = null;
//                Window = IntPtr.Zero;
//                WindowState = WindowState.Normal;
//                IsForeground = false;
//                ScreenCoordinates = Rectangle.Empty;
//                OverlayWindow?.Close();
//                OverlayWindow = null;
            }
コード例 #9
0
ファイル: ComplexFactory.cs プロジェクト: mikedamay/PureDI
        public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
        {
            switch ((int)args.FactoryParmeter)
            {
            case 1:
                return(pDependencyInjector.CreateAndInjectDependencies <ChildOne>(injectionState));

            case 2:
                return(pDependencyInjector.CreateAndInjectDependencies <ChildTwo>(injectionState));

            default:
                throw new Exception("Execute failed");
            }
        }
コード例 #10
0
        private static void OnGameInjectionStateChange(GameType gameType, InjectionState injectionState)
        {
            if (injectionState != InjectionState.Injected)
            {
                return;
            }
            if (!config.TryGetValue(gameType.ToString(), out var subConfig))
            {
                subConfig = new Dictionary <string, object>();
            }
            string jsonConfig = JsonConvert.SerializeObject(subConfig);

            if (ProcessMonitor.SendCommand(gameType, CommandType.Config, jsonConfig, 10000) != "Done")
            {
                ProcessMonitor.SendCommand(gameType, CommandType.Config, jsonConfig, 10000);
            }
        }
コード例 #11
0
        private InjectionState CreateAndInjectDocumentParser(InjectionState injectionState
                                                             , string beanName, string documentPath, string xmlRoot, Type resourceAssemblyFinder)
        {
            IIOCCXPathNavigatorCache nc;

            (nc, injectionState)      = pdi.CreateAndInjectDependencies <IIOCCXPathNavigatorCache>(injectionState);
            nc.Factory                = navigatorFactory;
            nc.ResourcePath           = (string)propertyMap.Map(documentPath);
            nc.ResourceAssemblyFinder = resourceAssemblyFinder;
            IOCCDocumentParser ddp;

            (ddp, injectionState) = pdi.CreateAndInjectDependencies <IOCCDocumentParser>(injectionState);
            ddp.XmlRoot           = xmlRoot;
            ddp.NavigatorCache    = nc;
            return(pdi.CreateAndInjectDependencies(ddp, injectionState: injectionState, rootBeanSpec:
                                                   new RootBeanSpec(rootBeanName: beanName), deferDepedencyInjection: false).injectionState);
        }
コード例 #12
0
ファイル: ObjectTree.cs プロジェクト: mikedamay/PureDI
        public InjectionState CreateAndInjectDependencies(object rootObject,
                                                          InjectionState injectionState, RootBeanSpec rootBeanSpec = null, bool deferDependencyInjection = false)
        {
            try
            {
                Type constructableType = rootObject.GetType();
                rootBeanSpec = rootBeanSpec ?? new RootBeanSpec();
                rootBeanSpec = rootBeanSpec.Scope == BeanScope.Prototype
                  ? new RootBeanSpec("prototype-" + Guid.NewGuid().ToString()
                                     , rootBeanSpec.RootConstrutorName, rootBeanSpec.Scope)
                  : rootBeanSpec;
                // in the call to CreateObjectTree we trick the method to create the dependencies
                // by adding the prototype uniquely to both the type map and the deferred assignment list
                var    rodt     = new RootObjectDecisionTable(deferDependencyInjection, rootBeanSpec.Scope);
                string beanName = rootBeanSpec.RootBeanName;
                rodt.MaybeAddBeanToTypeMap(
                    () => injectionState = UpdateTypeMap(injectionState, rootBeanSpec, constructableType, beanName));
                rodt.MaybeAddObjectToCreatedSoFarMap(
                    () => injectionState.MapObjectsCreatedSoFar[new InstantiatedBeanId(constructableType
                                                                                       , beanName, rootBeanSpec.RootConstrutorName)] = rootObject);
                rodt.MaybeAddDeferredIn(
                    () => injectionState.CreationContext.BeansWithDeferredAssignments
                    .Add(new ConstructableBean(rootObject.GetType(), beanName)));

                ConstructableBean cb    = new ConstructableBean(constructableType, beanName);
                bool      deferredIn    = injectionState.CreationContext.BeansWithDeferredAssignments.Contains(cb);
                BeanMaker rootBeanMaker = (scope, spec, ct, mocf, diags, cp, cc) =>
                {
                    if (!deferredIn && cc.BeansWithDeferredAssignments.Contains(cb))
                    {
                        // a cyclical dependency has been encountered which has triggered a genuine
                        // deferred assignment.  This needs to be squashed
                        cc.BeansWithDeferredAssignments.Remove(cb);
                    }
                    return(true, rootObject);
                };
                (_, injectionState) = CreateObjectTree(new BeanSpec(constructableType, beanName, rootBeanSpec.RootConstrutorName)
                                                       , injectionState.CreationContext, injectionState, new BeanReferenceDetails(), rootBeanSpec.Scope, rootBeanMaker);
                rodt.MaybeAddDeferredOut(
                    () => injectionState.CreationContext.BeansWithDeferredAssignments
                    .Add(new ConstructableBean(rootObject.GetType(), beanName)));
                return(injectionState);
            }
コード例 #13
0
ファイル: DiverseCycles.cs プロジェクト: mikedamay/PureDI
        public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
        {
            var pdi = new DependencyInjector();

            if (args.FactoryParmeter as Type == typeof(DiverseA))
            {
                return(pdi.CreateAndInjectDependencies <DiverseA>(injectionState));
            }
            else if (args.FactoryParmeter as Type == typeof(DiverseB))
            {
                return(pdi.CreateAndInjectDependencies(args.FactoryParmeter as Type, injectionState));
            }
            else if (args.FactoryParmeter as Type == typeof(DiverseC))
            {
                return(pdi.CreateAndInjectDependencies((args.FactoryParmeter as Type).FullName, injectionState));
            }
            else
            {
                var diverseD = new DiverseD();
                return(pdi.CreateAndInjectDependencies(diverseD, injectionState));
            }
        }
コード例 #14
0
        Configure(InjectionState injectionState = null)
        {
            injectionState = pdi.CreateAndInjectDependencies(this, injectionState: injectionState
                                                             , deferDepedencyInjection: false).injectionState;
            injectionState = CreateAndInjectDocumentParser(injectionState
                                                           , "site-userguide", "PureDIDocumentor.Docs.UserGuide.xml", Constants.UserGuideRoot
                                                           , typeof(DependencyConfiguration));
            injectionState = CreateAndInjectDocumentParser(injectionState
                                                           , "site-diagnostics", "PureDI.Docs.DiagnosticSchema.xml", Constants.DiagnosticSchemaRoot
                                                           , typeof(DependencyInjector));
            injectionState = CreateAndInjectDocumentParser(injectionState
                                                           , "doc-userguide", "PureDIDocumentor.Docs.UserGuide.xml", Constants.UserGuideRoot
                                                           , typeof(DependencyConfiguration));
            InjectionState @is;

            (_, @is) =
                pdi.CreateAndInjectDependencies(
                    new GenericConfig(("relativePath", "../../../../Simple")), injectionState: injectionState)
            ;
            (IDocumentProcessor dp, InjectionState is2) = pdi.CreateAndInjectDependencies <
                IDocumentProcessor>(@is);
            (var dsg, var is3) = pdi.CreateAndInjectDependencies <IDocumentationSiteGenerator>(is2);
            return(dsg, dp, is3);
        }
コード例 #15
0
 internal InjectionState CheckInjectionOf(string target)
 {
     using (var dll = ModuleDefinition.ReadModule(target)) {
         foreach (var typeName in new string[] { Injector.HOOK_TYPE, Injector.PPML_HOOK_TYPE })
         {
             var type = dll.GetType(typeName);
             if (type == null)
             {
                 continue;
             }
             var result = CheckInjection(type);
             if (result != InjectionState.NONE)
             {
                 if (Target.Equals(target))
                 {
                     lock (this)
                         Status = result;
                 }
                 return(result);
             }
         }
     }
     return(InjectionState.NONE);
 }
コード例 #16
0
ファイル: ObjectTree.cs プロジェクト: mikedamay/PureDI
        CreateAndInjectDependencies(Type rootType, InjectionState injectionState, string rootBeanName
                                    , string rootConstructorName, BeanScope scope)
        {
            try
            {
                Assert(rootType != null);
                Assert(rootBeanName != null);
                object rootObject;

                (rootObject, injectionState) = CreateObjectTree(
                    new BeanSpec(rootType, rootBeanName, rootConstructorName)
                    , injectionState.CreationContext, injectionState, new BeanReferenceDetails(), scope, MakeBean);
                if (rootObject != null && !rootType.IsInstanceOfType(rootObject))
                {
                    throw new DIException(
                              $"object created by IOC container is not {rootType.Name} as expected",
                              injectionState.Diagnostics);
                }

                Assert(rootObject == null ||
                       rootType.IsInstanceOfType(rootObject));
                return(rootObject, injectionState);
            }
            catch (NoArgConstructorException inace) // I suspect this is never executed
            {
                dynamic diagnostic = injectionState.Diagnostics.Groups["MissingNoArgConstructor"].CreateDiagnostic();
                diagnostic.Class = rootType.GetSafeFullName();
                injectionState.Diagnostics.Groups["MissingNoArgConstructor"].Add(diagnostic);
                throw new DIException("Failed to create object tree - see diagnostics for details", inace,
                                      injectionState.Diagnostics);
            }
            finally
            {
                RecordIncompleteAssignments(injectionState);
            }
        }
コード例 #17
0
 public static void Main()
 {
     InjectionState injectionState;
     PermanentService ps;
     var pdi = new DependencyInjector();
     (ps, injectionState) = pdi.CreateAndInjectDependencies<PermanentService>();
     InjectionState transitoryState = injectionState;
     for (int ii = 0; ii < 10; ii++)
     {
         BigData bigData;
         (bigData, transitoryState)
             = pdi.CreateAndInjectDependencies<BigData>(injectionState);
         Console.WriteLine(bigData.AddUp());     // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
                                                 // 500_000_500_000
     }
 }
コード例 #18
0
ファイル: SimpleFactory.cs プロジェクト: mikedamay/PureDI
 public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return(injector.CreateAndInjectDependencies <SimpleChild>(injectionState));
 }
コード例 #19
0
 private static int SayInjectedStatus(InjectionState injected)
 {
     WriteLine(injected.ToString().ToLower());
     return(RC_NORMAL);
 }
コード例 #20
0
 public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return(new ValueObject((string)args.FactoryParmeter), injectionState);
 }
コード例 #21
0
ファイル: BeanFactoryDemo.cs プロジェクト: mikedamay/PureDI
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return(new Repository(Environment.GetEnvironmentVariable("CONNECTION_STRING"))
            , injectionState);
 }
コード例 #22
0
     Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return (numberProvider.number, injectionState);
 }
コード例 #23
0
ファイル: FactoryPrototype.cs プロジェクト: mikedamay/PureDI
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     accumulator++;
     return(accumulator, injectionState);
 }
コード例 #24
0
ファイル: TypeMismatch.cs プロジェクト: mikedamay/PureDI
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return(42, injectionState);
 }
コード例 #25
0
ファイル: SimpleBean.cs プロジェクト: mikedamay/PureDI
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return(args.FactoryParmeter, injectionState);
 }
コード例 #26
0
 public override (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args) => (24, injectionState);
コード例 #27
0
 public abstract (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args);
コード例 #28
0
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     throw new Exception("test exception");
 }
コード例 #29
0
 public (object bean, InjectionState injectionState) Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     return(43, injectionState);
 }
コード例 #30
0
 Execute(InjectionState injectionState, BeanFactoryArgs args)
 {
     throw new System.NotImplementedException();
 }