Last active
October 4, 2018 01:31
-
-
Save j3parker/76d36f7957f841f5c6662fed3d05de64 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern alias Assembly1; | |
extern alias Assembly2; | |
// ... | |
public sealed class Container { | |
private readonly Assembly1::Foo.A m_Assembly1__Foo_A; | |
private readonly Assembly1::Foo.B m_Assembly1__Foo_B; | |
private readonly Assembly1::Foo.C m_Assembly1__Foo_C; | |
private readonly Assembly2::Bar.D m_Assembly2__Bar_D; | |
private readonly Assembly2::Bar.E m_Assembly2__Bar_E; | |
// ... | |
private Container( | |
Assembly1::Foo.A _Assembly1__Foo_A, | |
Assembly1::Foo.B _Assembly1__Foo_B, | |
Assembly1::Foo.C _Assembly1__Foo_C, | |
Assembly2::Foo.D _Assembly2__Foo_D, | |
Assembly2::Foo.E _Assembly2__Foo_E, | |
// ... | |
) { | |
m_Assembly1__Foo_A = _Assembly1__Foo_A; | |
m_Assembly1__Foo_B = _Assembly1__Foo_B; | |
m_Assembly1__Foo_C = _Assembly1__Foo_C; | |
m_Assembly2__Foo_D = _Assembly2__Foo_D; | |
m_Assembly2__Foo_E = _Assembly2__Foo_E; | |
// ... | |
} | |
public static Container Create() { | |
var _Assembly1__Foo_A = new Assembly1::Foo.A(); | |
var _Assembly1__Foo_B = new Assembly1::Foo.B(_Assembly1__Foo_A); | |
var _Assembly1__Foo_C = new Assembly1::Foo.C(_Assembly1__Foo_A); | |
var _Assembly2__Foo_D = new Assembly1::Foo.C(_Assembly1__Foo_B, _Assembly1__Foo_B); | |
var _Assembly2__Foo_E = new Assembly1::Foo.C(_Assembly1__Foo_A, _Assembly2__Foo_D); | |
// ... | |
return new Container( | |
_Assembly1__Foo_A, | |
_Assembly1__Foo_B, | |
_Assembly1__Foo_C, | |
_Assembly1__Foo_D, | |
_Assembly1__Foo_E, | |
//... | |
); | |
} | |
public T Get<T>() { | |
var typeName = typeof(T).AssemblyQualifiedName; | |
switch(typeName) { | |
case "Assembly1,Foo.A": return (T)m_Assembly1__Foo_A; | |
case "Assembly1,Foo.B": return (T)m_Assembly1__Foo_B; | |
case "Assembly1,Foo.C": return (T)m_Assembly1__Foo_C; | |
case "Assembly2,Foo.D": return (T)m_Assembly2__Foo_D; | |
case "Assembly2,Foo.E": return (T)m_Assembly2__Foo_E; | |
// ... | |
default: throw new Exception(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment