Skip to content

Instantly share code, notes, and snippets.

@j3parker
Last active October 4, 2018 01:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save j3parker/76d36f7957f841f5c6662fed3d05de64 to your computer and use it in GitHub Desktop.
Save j3parker/76d36f7957f841f5c6662fed3d05de64 to your computer and use it in GitHub Desktop.
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