public Assets([NotNull] ModuleWeaver moduleWeaver) { if (moduleWeaver == null) { throw new ArgumentNullException("moduleWeaver"); } _commands = new ConcurrentDictionary<string, CommandData>(); _moduleDefinition = moduleWeaver.ModuleDefinition; _log = moduleWeaver; var settings = moduleWeaver.Settings; _allClasses = new Lazy<List<TypeDefinition>>(()=> settings.GetAllTypes(moduleWeaver).ToList()); var types = new Types(moduleWeaver); _typeReferences = types; _typeDefinitions = types; var constructorDefinition = TypeDefinitions.Object.Methods.First(x => x.IsConstructor); _objectConstructorReference = ModuleDefinition.Import(constructorDefinition); var actionConstructor = TypeDefinitions.Action.Methods.First(x => x.IsConstructor); ActionConstructorReference = ModuleDefinition.Import(actionConstructor); var actionOfTConstructor = TypeDefinitions.ActionOfT.GetConstructors().First(); _actionOfTConstructorReference = ModuleDefinition.Import(actionOfTConstructor); var actionOfTInvokerDefinition = TypeDefinitions.ActionOfT.Methods.First(x => x.Name == "Invoke"); _actionOfTInvokeReference = ModuleDefinition.Import(actionOfTInvokerDefinition); var funcConstructor = TypeDefinitions.FuncOfT.Resolve().Methods.First(m => m.IsConstructor && m.Parameters.Count == 2); _funcOfBoolConstructorReference = ModuleDefinition.Import(funcConstructor).MakeHostInstanceGeneric(TypeReferences.Boolean); var predicateOfTConstructor = TypeDefinitions.PredicateOfT.GetConstructors().First(); _predicateOfTConstructorReference = ModuleDefinition.Import(predicateOfTConstructor); var predicateOfTInvokerDefinition = TypeDefinitions.PredicateOfT.Methods.First(x => x.Name == "Invoke"); _predicateOfTInvokeReference = ModuleDefinition.Import(predicateOfTInvokerDefinition); var delegateCombineDefinition = TypeDefinitions.Delegate.Methods.First(x => x.Name == "Combine" && x.Parameters.Count == 2); _delegateCombineMethodReference = ModuleDefinition.Import(delegateCombineDefinition); var delegateRemoveDefinition = TypeDefinitions.Delegate.Methods.First(x => x.Name == "Remove" && x.Parameters.Count == 2); _delegateRemoveMethodReference = ModuleDefinition.Import(delegateRemoveDefinition); var interlockedCompareExchangeMethodDefinition = TypeDefinitions.Interlocked.Methods.First( x => x.Name == "CompareExchange" && x.Parameters.Count == 3 && x.HasGenericParameters ); _interlockedCompareExchangeOfT = ModuleDefinition.Import(interlockedCompareExchangeMethodDefinition); _interlockedCompareExchangeOfEventHandler = new GenericInstanceMethod(_interlockedCompareExchangeOfT); _interlockedCompareExchangeOfEventHandler.GenericArguments.Add(TypeReferences.EventHandler); //_interlockedCompareExchangeOfEventHandler = if (TypeDefinitions.CommandManager != null) { var requeryEvent = TypeDefinitions.CommandManager.Resolve().Events.Single(evt => evt.Name == "RequerySuggested"); _commandManagerAddRequerySuggestedMethodReference = ModuleDefinition.Import(requeryEvent.AddMethod); _commandManagerRemoveRequerySuggestedMethodReference = ModuleDefinition.Import(requeryEvent.RemoveMethod); } _commandImplementationConstructors = GetCommandImplementationConstructors(); constructorDefinition = TypeDefinitions.ArgumentNullException.Methods.Single( x => x.IsConstructor && x.HasParameters && x.Parameters.Count == 1); _argumentNullExceptionConstructorReference = ModuleDefinition.Import(constructorDefinition); }
public Assets([NotNull] ModuleWeaver moduleWeaver) { if (moduleWeaver == null) { throw new ArgumentNullException("moduleWeaver"); } _commands = new ConcurrentDictionary <string, CommandData>(); _moduleDefinition = moduleWeaver.ModuleDefinition; _log = moduleWeaver; var settings = moduleWeaver.Settings; _allClasses = new Lazy <List <TypeDefinition> >(() => settings.GetAllTypes(moduleWeaver).ToList()); var types = new Types(moduleWeaver); _typeReferences = types; _typeDefinitions = types; var constructorDefinition = TypeDefinitions.Object.Methods.First(x => x.IsConstructor); _objectConstructorReference = ModuleDefinition.Import(constructorDefinition); var actionConstructor = TypeDefinitions.Action.Methods.First(x => x.IsConstructor); ActionConstructorReference = ModuleDefinition.Import(actionConstructor); var actionOfTConstructor = TypeDefinitions.ActionOfT.GetConstructors().First(); _actionOfTConstructorReference = ModuleDefinition.Import(actionOfTConstructor); var actionOfTInvokerDefinition = TypeDefinitions.ActionOfT.Methods.First(x => x.Name == "Invoke"); _actionOfTInvokeReference = ModuleDefinition.Import(actionOfTInvokerDefinition); var funcConstructor = TypeDefinitions.FuncOfT.Resolve().Methods.First(m => m.IsConstructor && m.Parameters.Count == 2); _funcOfBoolConstructorReference = ModuleDefinition.Import(funcConstructor).MakeHostInstanceGeneric(TypeReferences.Boolean); var predicateOfTConstructor = TypeDefinitions.PredicateOfT.GetConstructors().First(); _predicateOfTConstructorReference = ModuleDefinition.Import(predicateOfTConstructor); var predicateOfTInvokerDefinition = TypeDefinitions.PredicateOfT.Methods.First(x => x.Name == "Invoke"); _predicateOfTInvokeReference = ModuleDefinition.Import(predicateOfTInvokerDefinition); var delegateCombineDefinition = TypeDefinitions.Delegate.Methods.First(x => x.Name == "Combine" && x.Parameters.Count == 2); _delegateCombineMethodReference = ModuleDefinition.Import(delegateCombineDefinition); var delegateRemoveDefinition = TypeDefinitions.Delegate.Methods.First(x => x.Name == "Remove" && x.Parameters.Count == 2); _delegateRemoveMethodReference = ModuleDefinition.Import(delegateRemoveDefinition); var interlockedCompareExchangeMethodDefinition = TypeDefinitions.Interlocked.Methods.First( x => x.Name == "CompareExchange" && x.Parameters.Count == 3 && x.HasGenericParameters ); _interlockedCompareExchangeOfT = ModuleDefinition.Import(interlockedCompareExchangeMethodDefinition); _interlockedCompareExchangeOfEventHandler = new GenericInstanceMethod(_interlockedCompareExchangeOfT); _interlockedCompareExchangeOfEventHandler.GenericArguments.Add(TypeReferences.EventHandler); //_interlockedCompareExchangeOfEventHandler = if (TypeDefinitions.CommandManager != null) { var requeryEvent = TypeDefinitions.CommandManager.Resolve().Events.Single(evt => evt.Name == "RequerySuggested"); _commandManagerAddRequerySuggestedMethodReference = ModuleDefinition.Import(requeryEvent.AddMethod); _commandManagerRemoveRequerySuggestedMethodReference = ModuleDefinition.Import(requeryEvent.RemoveMethod); } _commandImplementationConstructors = GetCommandImplementationConstructors(); constructorDefinition = TypeDefinitions.ArgumentNullException.Methods.Single( x => x.IsConstructor && x.HasParameters && x.Parameters.Count == 1); _argumentNullExceptionConstructorReference = ModuleDefinition.Import(constructorDefinition); }