Empeld
Empeld plugin documentation.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Pages
pluginbase.Dependencies.PluginDependencyExtensions Class Reference

Plugin dependency extensions. Included to maintain backwards compatibility More...

Static Public Member Functions

static IPluginLogger GetLogger< T > (this T asker)
 
static T GetDependency< T > (this object asker)
 Gets the dependency. More...
 
static void InjectDependencies< T > (this T cls)
 Find all dependency properties in the class and inject the dependency if available More...
 

Detailed Description

Plugin dependency extensions. Included to maintain backwards compatibility

Member Function Documentation

◆ GetDependency< T >()

static T pluginbase.Dependencies.PluginDependencyExtensions.GetDependency< T > ( this object  asker)
static

Gets the dependency.

Returns
The dependency.
Parameters
askerAsker.
Template Parameters
TThe 1st type parameter.
Type Constraints
T :class 
33  : class
34  {
35  return Game.Services.GetDependency<T>(asker.GetType().Assembly);
36  }

◆ GetLogger< T >()

static IPluginLogger pluginbase.Dependencies.PluginDependencyExtensions.GetLogger< T > ( this T  asker)
static
Type Constraints
T :class 
15  : class
16  {
17  return Game.Services.GetDependency<IPluginLogger>(typeof(T).Assembly);
18  }

◆ InjectDependencies< T >()

static void pluginbase.Dependencies.PluginDependencyExtensions.InjectDependencies< T > ( this T  cls)
static

Find all dependency properties in the class and inject the dependency if available

Parameters
clsCls.
Template Parameters
TThe 1st type parameter.
Type Constraints
T :class 
48  : class
49  {
50  Type type = typeof(T);
51 
52 #if DEBUG
53  if (type.Assembly.FullName.Contains("empeld"))
54  {
55  throw new AccessViolationException("DEBUG: Don't use dependency injection in empeld core");
56  }
57 #endif
58 
59  var propDependencies = type
60  .GetProperties(DEPN_BINDING)
61  .Where(x => Attribute.IsDefined(x, typeof(DependencyAttribute)));
62 
63  foreach (var target in propDependencies)
64  {
65  if (target.GetValue(cls, null) == null)
66  {
67  var attr = (DependencyAttribute)target.GetCustomAttributes(typeof(DependencyAttribute), true).Single();
68  var injectionResource = Game.Services.GetDependency(type.Assembly, target.PropertyType);
69  if (injectionResource != null)
70  {
71  PropertyInfo declarer = target;
72  if (declarer.DeclaringType != type)
73  {
74  declarer = target.DeclaringType.GetProperty(target.Name, DEPN_BINDING);
75  }
76  declarer.SetValue(cls, injectionResource, null);
77  }
78  else if(!attr.Optional)
79  {
80  throw new Exception(string.Format("Failed to inject dependency for {0}. Dependency doesn't exist, or doesn't exist on both client and server.", target.PropertyType));
81  }
82  }
83  }
84 
85 
86  var fieldDependencies = type.GetFields(DEPN_BINDING)
87  .Where(x => Attribute.IsDefined(x, typeof(DependencyAttribute)));
88 
89  foreach(var target in fieldDependencies)
90  {
91  if (target.GetValue(cls) == null)
92  {
93  var attr = (DependencyAttribute)target.GetCustomAttributes(typeof(DependencyAttribute), true).Single();
94  var injection = Game.Services.GetDependency(type.Assembly, target.FieldType);
95  if (injection != null)
96  {
97  FieldInfo declarer = target;
98  if (declarer.DeclaringType != type)
99  {
100  declarer = target.DeclaringType.GetField(target.Name, DEPN_BINDING);
101  }
102  declarer.SetValue(cls, injection);
103  }
104  else if(!attr.Optional)
105  {
106  throw new Exception(string.Format("Failed to inject field dependency for {0}. Dependency doesn't exist, or doesn't exist on both client and server.", target.FieldType));
107  }
108  }
109  }
110 
111  }

The documentation for this class was generated from the following file: