PavelAd
|
Дата: 23.08.2012
|
|
|
|
|
Чтобы получить файл настроек в новом формате вызываю как и раньше:
var StopLossSize = new Unit(200, UnitTypes.Limit);
....
settings.SetValue("StopLossSize", StopLossSize);
new XmlSerializer<SettingsStorage>().Serialize(settings, "settings_template.xml");
и получаю исключение:
System.Reflection.TargetInvocationException не обработано пользовательским кодом
Message=Адресат вызова создал исключение.
Source=mscorlib
StackTrace:
в System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct& signature, RuntimeType declaringType)
в System.RuntimeMethodHandle.InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct signature, RuntimeType declaringType)
в System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
в System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
в System.Activator.CreateInstance(Type type, Object[] args)
в Ecng.Common.TypeHelper.CreateInstanceArgs(Type type, Object[] args)
в Ecng.Serialization.ReflectionFieldFactoryAttribute.CreateFactory(Field field)
в Ecng.Serialization.TypeSchemaFactory.<>c__DisplayClass11.<CreateSchema>b__d(FieldFactoryAttribute a)
в System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() в System.Collections.Generic.List1..ctor(IEnumerable1 collection) в System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)
в Ecng.Serialization.TypeSchemaFactory.CreateSchema(Type entityType)
в Ecng.Serialization.SchemaManager.<>c__DisplayClass5.<GetSchema>b__4(Type key)
в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler, Boolean& isNew)
в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler)
в Ecng.Serialization.SchemaManager.GetSchema(Type entityType, SchemaFactory factory)
в Ecng.Serialization.SchemaManager.GetSchema(Type entityType)
в Ecng.Serialization.SchemaManager.GetSchemaTEntity
в Ecng.Serialization.Serializer1.get_Schema() в Ecng.Serialization.Serializer1.GetFields()
в Ecng.Serialization.Serializer1.Serialize(T graph, SerializationItemCollection source) в Ecng.Serialization.Serializer1.Ecng.Serialization.ISerializer.Serialize(Object graph, SerializationItemCollection source)
в Ecng.Serialization.InnerSchemaFieldFactory1.OnCreateSource(ISerializer serializer, TEntity instance) в Ecng.Serialization.FieldFactory2.OnCreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.DynamicFieldFactory.OnCreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.FieldFactory2.OnCreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.FieldFactory.CreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.Serializer1.Serialize(T graph, FieldList fields, SerializationItemCollection source)
в Ecng.Serialization.Serializer1.Serialize(T graph, SerializationItemCollection source) в Ecng.Serialization.RealCollectionFieldFactory2.OnCreateSource(ISerializer serializer, TCollection instance)
в Ecng.Serialization.FieldFactory2.OnCreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.FieldFactory.CreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.Serializer1.Serialize(T graph, FieldList fields, SerializationItemCollection source)
в Ecng.Serialization.Serializer1.Serialize(T graph, FieldList fields, Stream stream) в Ecng.Serialization.Serializer1.Serialize(T graph, Stream stream)
в Ecng.Serialization.Serializer1.Serialize(T graph) в Ecng.Serialization.Serializer1.Serialize(T graph, String fileName)
в TradeStrategy.TresureStrategy.Save(SettingsStorage settings) в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 2004
в TradeStrategy.TresureStrategy.OnStopped() в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 367
в StockSharp.Algo.Strategies.Strategy.#=q9ZjYAh_tjTRiPKXRpMmVPaf8lHMr7XpjKfF8P_SBSxY=(ProcessStates #=qK93m3AC1JAhKyhuxNljMUw==)
InnerException: Microsoft.Practices.ServiceLocation.ActivationException
Message=Activation error occured while trying to get instance of type IStorage, key ""
Source=Microsoft.Practices.ServiceLocation
StackTrace:
в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstanceTService
в Ecng.Configuration.ConfigManager.GetService()
в Ecng.Serialization.RelationFieldFactory2..ctor(Field field, Int32 order) в Ecng.Serialization.RelationSingleFieldFactory2..ctor(Field field, Int32 order)
InnerException: Microsoft.Practices.Unity.ResolutionFailedException
Message=Resolution of the dependency failed, type = "Ecng.Serialization.IStorage", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, Ecng.Serialization.IStorage, is an interface and cannot be constructed. Are you missing a type mapping?
At the time of the exception, the container was:
Resolving Ecng.Serialization.IStorage,(none)
Source=Microsoft.Practices.Unity
TypeRequested=IStorage
StackTrace:
в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides)
в Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
в Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(Type serviceType, String key)
в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
InnerException: System.InvalidOperationException
Message=The current type, Ecng.Serialization.IStorage, is an interface and cannot be constructed. Are you missing a type mapping?
Source=Microsoft.Practices.Unity
StackTrace:
в Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext context)
в BuildUp_Ecng.Serialization.IStorage(IBuilderContext )
в Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
в Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
в Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
InnerException:
Исключение выходит только в случае сохранения параметров типа Unit
|
PavelAd
|
Дата: 27.08.2012
|
|
|
|
|
Mikhail Sukhov:
Unit так просто не сохранить в файл. Там нужно регистрировать загрузчик инструментов для инициализации Unit.Security
И как тогда быть? Возожно привести пример такого загрузчика?
Замечу еще раз что в 4.1.2 в старом формате все выгружалось, например:
<StopLoss type="StockSharp.BusinessEntities.Unit, StockSharp.BusinessEntities, Version=4.1.2.0, Culture=neutral, PublicKeyToken=null">
<Security hasValue="false" />
<Type>0</Type>
<Value>120</Value>
</StopLoss>
В новом формате сложные типы (например индикаторы) выгружаются без проблем, например EMA:
<KeyValuePairBeginStringAndObjectEnd>
<key>MAHigh</key>
<value>
<Type type="string">StockSharp.Algo.Indicators.ExponentialMovingAverage, StockSharp.Algo.Indicators, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Type>
<Value type="StockSharp.Algo.Indicators.ExponentialMovingAverage, StockSharp.Algo.Indicators, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<Length>10</Length>
<Name>ExponentialMovingAverage</Name>
</Value>
</value>
</KeyValuePairBeginStringAndObjectEnd>
почему Unit не выгружается по аналогии:
<KeyValuePairBeginStringAndObjectEnd>
<key>StopLoss</key>
<value>
<Type type="string">StockSharp.BusinessEntities.Unit, StockSharp.BusinessEntities, Version=4.1.4.0, Culture=neutral, PublicKeyToken=null</Type>
<Value type="StockSharp.BusinessEntities.Unit, StockSharp.BusinessEntities, Version=4.1.4.0, Culture=neutral, PublicKeyToken=null">
<Security hasValue="false" />
<Type>0</Type>
<Value>120</Value>
</Value>
</value>
</KeyValuePairBeginStringAndObjectEnd>
|