diff --git a/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactListPageModel.cs b/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactListPageModel.cs index 207592d..ccbf83d 100644 --- a/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactListPageModel.cs +++ b/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactListPageModel.cs @@ -6,18 +6,15 @@ using System.Diagnostics.Contracts; using System.Linq; using System.Windows.Input; +using FreshTinyIoC; namespace FreshMvvmSampleApp { [PropertyChanged.AddINotifyPropertyChangedInterface] public class ContactListPageModel : FreshBasePageModel { - IDatabaseService _databaseService; - - public ContactListPageModel (IDatabaseService databaseService) - { - _databaseService = databaseService; - } + [TinyIocInject] + public IDatabaseService _databaseService { get; set; } public ObservableCollection Contacts { get; set; } diff --git a/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactPageModel.cs b/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactPageModel.cs index 47f702b..691f6a3 100644 --- a/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactPageModel.cs +++ b/samples/FreshMvvmSampleApp/FreshMvvmSampleApp/PageModels/ContactPageModel.cs @@ -8,12 +8,10 @@ namespace FreshMvvmSampleApp [PropertyChanged.AddINotifyPropertyChangedInterface] public class ContactPageModel : FreshBasePageModel { - IDatabaseService _dataService; + public IDatabaseService _dataService { get; set; } - public ContactPageModel (IDatabaseService dataService) + public ContactPageModel () { - _dataService = dataService; - this.WhenAny(HandleContactChanged, o => o.Contact); } diff --git a/src/FreshIOC/FreshTinyIOC.cs b/src/FreshIOC/FreshTinyIOC.cs index 8c809e4..196c824 100644 --- a/src/FreshIOC/FreshTinyIOC.cs +++ b/src/FreshIOC/FreshTinyIOC.cs @@ -3424,7 +3424,7 @@ private static ObjectConstructor CreateObjectConstructionDelegateWithCache(Const private void BuildUpInternal(object input, ResolveOptions resolveOptions) { var properties = from property in input.GetType().GetProperties() - where (property.GetGetMethod() != null) && (property.GetSetMethod() != null) && !property.PropertyType.IsValueType() + where (property.GetGetMethod() != null) && (property.GetSetMethod() != null) && !property.PropertyType.IsValueType() && property.GetCustomAttributes(typeof(TinyIocInjectAttribute), true).Any() select property; foreach (var property in properties) diff --git a/src/FreshIOC/IOC.csproj b/src/FreshIOC/IOC.csproj index c9ed719..a23b93c 100644 --- a/src/FreshIOC/IOC.csproj +++ b/src/FreshIOC/IOC.csproj @@ -10,6 +10,7 @@ FreshIOC Profile14 v4.0 + 2.2.0 true @@ -32,6 +33,7 @@ + \ No newline at end of file diff --git a/src/FreshIOC/TinyIocInjectAttribute.cs b/src/FreshIOC/TinyIocInjectAttribute.cs new file mode 100644 index 0000000..f93cd93 --- /dev/null +++ b/src/FreshIOC/TinyIocInjectAttribute.cs @@ -0,0 +1,7 @@ +using System; +namespace FreshTinyIoC +{ + public class TinyIocInjectAttribute : Attribute + { + } +} diff --git a/src/FreshMvvm/FreshPageModelResolver.cs b/src/FreshMvvm/FreshPageModelResolver.cs index 74c54d3..36e3bd8 100644 --- a/src/FreshMvvm/FreshPageModelResolver.cs +++ b/src/FreshMvvm/FreshPageModelResolver.cs @@ -15,7 +15,6 @@ public static Page ResolvePageModel () where T : FreshBasePageModel public static Page ResolvePageModel (object initData) where T : FreshBasePageModel { var pageModel = FreshIOC.Container.Resolve (); - return ResolvePageModel (initData, pageModel); } @@ -33,6 +32,7 @@ public static Page ResolvePageModel (Type type, object data) public static Page ResolvePageModel (Type type, object data, FreshBasePageModel pageModel) { + FreshIOC.Container.BuildUp(ref pageModel); var name = PageModelMapper.GetPageTypeName (type); var pageType = Type.GetType (name); if (pageType == null) diff --git a/src/FreshMvvm/FreshTinyIOCBuiltIn.cs b/src/FreshMvvm/FreshTinyIOCBuiltIn.cs index d618701..d193836 100644 --- a/src/FreshMvvm/FreshTinyIOCBuiltIn.cs +++ b/src/FreshMvvm/FreshTinyIOCBuiltIn.cs @@ -28,12 +28,16 @@ public IRegisterOptions Register(RegisterType instance) where Regi public ResolveType Resolve(string name) where ResolveType : class { - return FreshTinyIoCContainer.Current.Resolve (name); + var result = FreshTinyIoCContainer.Current.Resolve(name); + BuildUp(ref result); + return result; } public ResolveType Resolve() where ResolveType : class { - return FreshTinyIoCContainer.Current.Resolve (); + var result = FreshTinyIoCContainer.Current.Resolve(); + BuildUp(ref result); + return result; } public IRegisterOptions Register () @@ -45,7 +49,14 @@ public IRegisterOptions Register () public object Resolve(Type resolveType) { - return FreshTinyIoCContainer.Current.Resolve (resolveType); + var result = FreshTinyIoCContainer.Current.Resolve (resolveType); + BuildUp(ref result); + return result; + } + + public void BuildUp(ref ResolveType input) where ResolveType : class + { + FreshTinyIoCContainer.Current.BuildUp(input); } public void Unregister() diff --git a/src/FreshMvvm/IOC/IFreshIOC.cs b/src/FreshMvvm/IOC/IFreshIOC.cs index 5bd4974..69cca82 100644 --- a/src/FreshMvvm/IOC/IFreshIOC.cs +++ b/src/FreshMvvm/IOC/IFreshIOC.cs @@ -5,6 +5,7 @@ namespace FreshMvvm public interface IFreshIOC { object Resolve(Type resolveType); + void BuildUp(ref ResolveType input) where ResolveType : class; IRegisterOptions Register(RegisterType instance) where RegisterType : class; IRegisterOptions Register(RegisterType instance, string name) where RegisterType : class; ResolveType Resolve() where ResolveType : class;