/// <summary> /// Add property setter for property, use the Resolver to determine the value of the property /// </summary> /// <typeparam name="TPropertyType"></typeparam> /// <param name="propertyExpression"></param> public static void AddPropertySetter <TPropertyType>(Expression <Func <T, TPropertyType> > propertyExpression) where TPropertyType : class { Expression <Func <TPropertyType> > setter = () => GenericResolver <TPropertyType> .Resolve(); AddPropertySetterInner <TPropertyType>(propertyExpression, setter); }
public void TestMethod2() { //var s1 = GenericResolver<TestClass>.Resolve(); GenericResolver <IYY> .SetResolver(() => new YY { Details = "From Factory" }); GenericResolver <IYY> .AddPropertySetter(v => v.Details, () => DateTime.Now.ToString()); GenericResolver <IYY> .AddPropertySetter(v => v.XXObject); GenericResolver <IXX> .SetResolver(() => new XX { Description = "From Factory" }); var z1 = GenericResolver <TestClassComplexConstructor> .Resolve(); Thread.Sleep(1000); var z2 = GenericResolver <TestClassComplexConstructor> .Resolve(); Thread.Sleep(1000); var z3 = GenericResolver <TestClassComplexConstructor> .Resolve(); Thread.Sleep(1000); var z4 = GenericResolver <TestClassComplexConstructor> .Resolve(); Thread.Sleep(1000); var z5 = GenericResolver <TestClassComplexConstructor> .Resolve(); var stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < 1000000; i++) { var zz = GenericResolver <TestClassComplexConstructor> .Resolve(); } Debug.Print("Generic Milliseconds: {0}", stopwatch.ElapsedMilliseconds); stopwatch.Start(); for (int i = 0; i < 1000000; i++) { var zz = new TestClass(); } Debug.Print("New Milliseconds: {0}", stopwatch.ElapsedMilliseconds); var unityObject = new UnityContainer(); unityObject.RegisterType <IXX, XX>() .RegisterType <IYY, YY>() .RegisterType <TestClassComplexConstructor, TestClassComplexConstructor>(new InjectionFactory(v => new TestClassComplexConstructor(unityObject.Resolve <IXX>(), unityObject.Resolve <IYY>()))); stopwatch.Start(); for (int i = 0; i < 1000000; i++) { var zz = unityObject.Resolve <TestClassComplexConstructor>(); } Debug.Print("Unity Milliseconds: {0}", stopwatch.ElapsedMilliseconds); }