Skip to content

Commit 2adbf00

Browse files
committed
Trying registration builder
1 parent 744bd3a commit 2adbf00

File tree

11 files changed

+211
-169
lines changed

11 files changed

+211
-169
lines changed

src/Extensions/Lifetime/TypeLifetime.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ public static class TypeLifetime
66
{
77
public static ITypeLifetimeManager Singleton => new SingletonLifetimeManager();
88

9+
public static ITypeLifetimeManager ContainerControlled => new ContainerControlledLifetimeManager();
10+
911
public static ITypeLifetimeManager PerContainer => new ContainerControlledLifetimeManager();
1012

1113
public static ITypeLifetimeManager Hierarchical => new HierarchicalLifetimeManager();
@@ -16,7 +18,7 @@ public static class TypeLifetime
1618

1719
public static ITypeLifetimeManager PerThread => new PerThreadLifetimeManager();
1820

19-
public static ITypeLifetimeManager Transient { get; } = new TransientLifetimeManager();
21+
public static ITypeLifetimeManager Transient => TransientLifetimeManager.Instance;
2022

2123
public static ITypeLifetimeManager PerContainerTransient => new ContainerControlledTransientManager();
2224
}
File renamed without changes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Collections.Generic;
2+
3+
namespace System.Linq
4+
{
5+
internal static class LinqCompatibilityExtension
6+
{
7+
#if NET40 || NET45 || NET46 || NET47 || NETSTANDARD1_0
8+
9+
public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element)
10+
{
11+
return source.Concat(new[] { element });
12+
}
13+
14+
#endif
15+
}
16+
}
File renamed without changes.

src/Extensions/Registration/Extension.cs

Lines changed: 0 additions & 110 deletions
This file was deleted.

src/Extensions/Registration/TypeRegistration.cs

Lines changed: 0 additions & 58 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Linq;
2+
using Unity.Extensions.Syntax;
3+
using Unity.Injection;
4+
5+
namespace Unity
6+
{
7+
public static class TypeRegistrationConstructorExtension
8+
{
9+
public static TypeRegistration Constructor(this TypeRegistration registration, params object[] parameters)
10+
{
11+
registration.members = registration.members.Append(new InjectionConstructor(parameters));
12+
return registration;
13+
}
14+
}
15+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using System;
2+
using System.ComponentModel;
3+
using Unity.Extensions.Syntax;
4+
using Unity.Lifetime;
5+
using static Unity.Extensions.Syntax.TypeRegistration;
6+
7+
8+
namespace Unity
9+
{
10+
11+
public static class TypeRegistrationLifetimeExtension
12+
{
13+
public static TypeRegistration SingletonLifetime(this LifetimeProxy proxy)
14+
{
15+
return proxy.WithLifetime(new SingletonLifetimeManager());
16+
}
17+
18+
public static TypeRegistration PerContainerLifetime(this LifetimeProxy proxy)
19+
{
20+
return proxy.WithLifetime(new ContainerControlledLifetimeManager());
21+
}
22+
23+
public static TypeRegistration ContainerControlledLifetime(this LifetimeProxy proxy)
24+
{
25+
return proxy.WithLifetime(new ContainerControlledLifetimeManager());
26+
}
27+
28+
public static TypeRegistration HierarchicalLifetime(this LifetimeProxy proxy)
29+
{
30+
return proxy.WithLifetime(new HierarchicalLifetimeManager());
31+
}
32+
33+
public static TypeRegistration PerResolveLifetime(this LifetimeProxy proxy)
34+
{
35+
return proxy.WithLifetime(new PerResolveLifetimeManager());
36+
}
37+
38+
public static TypeRegistration PerThreadLifetime(this LifetimeProxy proxy)
39+
{
40+
return proxy.WithLifetime(new PerThreadLifetimeManager());
41+
}
42+
43+
public static TypeRegistration PerContainerTransientLifetime(this LifetimeProxy proxy)
44+
{
45+
return proxy.WithLifetime(new ContainerControlledTransientManager());
46+
}
47+
48+
}
49+
50+
public class LifetimeProxy
51+
{
52+
TypeRegistration _parent;
53+
54+
internal LifetimeProxy(TypeRegistration parent)
55+
{
56+
_parent = parent;
57+
}
58+
59+
public TypeRegistration WithLifetime(ITypeLifetimeManager manager)
60+
{
61+
_parent.lifetime = manager;
62+
return _parent;
63+
}
64+
65+
[EditorBrowsable(EditorBrowsableState.Never)]
66+
public override string ToString()
67+
{
68+
return base.ToString();
69+
}
70+
71+
[EditorBrowsable(EditorBrowsableState.Never)]
72+
public override bool Equals(object obj)
73+
{
74+
return base.Equals(obj);
75+
}
76+
77+
[EditorBrowsable(EditorBrowsableState.Never)]
78+
public override int GetHashCode()
79+
{
80+
return base.GetHashCode();
81+
}
82+
}
83+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
using System.Linq;
3+
using Unity.Extensions.Syntax;
4+
5+
namespace Unity
6+
{
7+
public static class TypeRegistrationRegisterExtension
8+
{
9+
public static IUnityContainer Register(this TypeRegistration registration)
10+
=> registration.container.RegisterType(null, registration.type, null, registration.lifetime, registration.members.ToArray());
11+
12+
public static IUnityContainer RegisterAs(this TypeRegistration registration, string name)
13+
=> registration.container.RegisterType(null, registration.type, name, registration.lifetime, registration.members.ToArray());
14+
15+
public static IUnityContainer RegisterAs(this TypeRegistration registration, Type type, string name = null)
16+
=> registration.container.RegisterType(type, registration.type, name, registration.lifetime, registration.members.ToArray());
17+
18+
public static IUnityContainer RegisterAs<TType>(this TypeRegistration registration, string name = null)
19+
=> registration.container.RegisterType(typeof(TType), registration.type, name, registration.lifetime, registration.members.ToArray());
20+
}
21+
}

src/Extensions/Syntax/Type/Type.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using Unity.Extensions.Syntax;
3+
4+
namespace Unity
5+
{
6+
7+
public static class TypeRegistrationExtension
8+
{
9+
// Type
10+
public static TypeRegistration Type(this IUnityContainer container, Type type)
11+
=> new TypeRegistration(container, type);
12+
13+
public static TypeRegistration Type<TType>(this IUnityContainer container)
14+
=> new TypeRegistration(container, typeof(TType));
15+
}
16+
17+
}

0 commit comments

Comments
 (0)