public void AccessorCreatesNewObjectsThroughSlotBinding() { DataSource source = new DataSource("data"); source.AddDataSet(new ItemSequenceDataSet(new IDataItem[] { new ListDataItem <object>(new object[] { 42, typeof(int) }, null, false) }, 2)); IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>(); using (Mocks.Record()) { Expect.Call(resolver.ResolveDataSource("data")).Repeat.Twice().Return(source); } using (Mocks.Playback()) { ITypeInfo type = Reflector.Wrap(typeof(Holder <>)); IConstructorInfo constructor = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public)[0]; ISlotInfo valueSlot = constructor.Parameters[0]; ISlotInfo typeSlot = (IGenericParameterInfo)type.GenericArguments[0]; DataBindingContext context = new DataBindingContext(new NullConverter()); ObjectDataBinder binder = new ObjectDataBinder(type); binder.SetSlotBinder(valueSlot, new ScalarDataBinder(new DataBinding(0, null), "data")); binder.SetSlotBinder(typeSlot, new ScalarDataBinder(new DataBinding(1, null), "data")); IDataAccessor accessor = binder.Register(context, resolver); List <IDataItem> items = new List <IDataItem>(context.GetItems(true)); Assert.Count(1, items); Holder <int> holder = (Holder <int>)accessor.GetValue(items[0]); Assert.AreEqual(42, holder.Value, "Should have set the value via the constructor parameter."); } }
public void AccessorObtainsAValueFromTheRow() { DataBinding binding = new DataBinding(0, null); ScalarDataBinder binder = new ScalarDataBinder(binding, "name"); IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>(); DataBindingContext context = new DataBindingContext(new NullConverter()); DataSource source = new DataSource("name"); source.AddDataSet(new ItemSequenceDataSet(new IDataItem[] { new ScalarDataItem <int>(42, null, false), new ScalarDataItem <string>("42", null, false) }, 1)); using (Mocks.Record()) { Expect.Call(resolver.ResolveDataSource("name")).Return(source); } using (Mocks.Playback()) { IDataAccessor accessor = binder.Register(context, resolver); Assert.IsTrue(context.DataSets.Contains(source), "The data sets list should contain the source that was resolved during binder registration."); List <IDataItem> items = new List <IDataItem>(context.GetItems(true)); Assert.Count(2, items); Assert.AreEqual(42, accessor.GetValue(items[0])); Assert.AreEqual("42", accessor.GetValue(items[1])); } }
/// <inheritdoc /> protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver) { IDataSet dataSet = resolver.ResolveDataSource(sourceName); if (dataSet == null) throw new DataBindingException(String.Format("The data binder was unable to resolve a data source named '{0}'.", sourceName)); return context.RegisterBinding(dataSet, binding); }
/// <inheritdoc /> public IDataAccessor Register(DataBindingContext context, IDataSourceResolver resolver) { if (context == null) throw new ArgumentNullException("context"); if (resolver == null) throw new ArgumentNullException("resolver"); return RegisterImpl(context, resolver); }
/// <inheritdoc /> protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver) { IDataSet dataSet = resolver.ResolveDataSource(sourceName); if (dataSet == null) { throw new DataBindingException(String.Format("The data binder was unable to resolve a data source named '{0}'.", sourceName)); } return(context.RegisterBinding(dataSet, binding)); }
/// <inheritdoc /> protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver) { var slotAccessors = new List<KeyValuePair<ISlotInfo,IDataAccessor>>(slotBinders.Count); foreach (KeyValuePair<ISlotInfo, IDataBinder> slotBinder in slotBinders) { IDataAccessor accessor = slotBinder.Value.Register(context, resolver); slotAccessors.Add(new KeyValuePair<ISlotInfo, IDataAccessor>(slotBinder.Key, accessor)); } return new Accessor(type, slotAccessors, context.Converter); }
/// <inheritdoc /> protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver) { var slotAccessors = new List <KeyValuePair <ISlotInfo, IDataAccessor> >(slotBinders.Count); foreach (KeyValuePair <ISlotInfo, IDataBinder> slotBinder in slotBinders) { IDataAccessor accessor = slotBinder.Value.Register(context, resolver); slotAccessors.Add(new KeyValuePair <ISlotInfo, IDataAccessor>(slotBinder.Key, accessor)); } return(new Accessor(type, slotAccessors, context.Converter)); }
/// <inheritdoc /> public IDataAccessor Register(DataBindingContext context, IDataSourceResolver resolver) { if (context == null) { throw new ArgumentNullException("context"); } if (resolver == null) { throw new ArgumentNullException("resolver"); } return(RegisterImpl(context, resolver)); }
public void RegisterThrowsIfTheDataSourceCannotBeResolvedByName() { ScalarDataBinder binder = new ScalarDataBinder(new DataBinding(0, null), "name"); IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>(); using (Mocks.Record()) { Expect.Call(resolver.ResolveDataSource("name")).Return(null); } using (Mocks.Playback()) { DataBindingContext context = new DataBindingContext(new NullConverter()); Assert.Throws <DataBindingException>(delegate { binder.Register(context, resolver); }); } }
/// <summary> /// Ctor: Accepts instances via constructor injection /// </summary> /// <param name="aggregateRepository">Instance of the AggregateRepository</param> /// <param name="dataSourceRepository">Instance of the DataSourceRepository</param> /// <param name="dataTypeRepository">Instance of the DataType Repository</param> /// <param name="importServiceResolver">Instance of the ImportServiceResolver</param> /// <param name="dataSourceResolver">Instance of the DataSourceResolver</param> public DataService(IAggregateRepository aggregateRepository, IDataSourceRepository dataSourceRepository, IDataTypeRepository dataTypeRepository, IImportServiceResolver importServiceResolver , IDataSourceResolver dataSourceResolver) { if (aggregateRepository == null) throw new ArgumentNullException("aggregateRepository", "No valid AggregateRepository supplied to DataService."); if (dataSourceRepository == null) throw new ArgumentNullException("dataSourceRepository", "No valid DataSourceRepository supplied to DataService."); if (dataTypeRepository == null) throw new ArgumentNullException("dataTypeRepository", "No valid DataTypeRepository supplied to DataService."); if (importServiceResolver == null) throw new ArgumentNullException("importServiceResolver", "No valid ImportServiceResolver supplied to DataService."); if (dataSourceResolver == null) throw new ArgumentNullException("dataSourceResolver", "No valid DataSourceResolver supplied to DataService."); _aggregateRepository = aggregateRepository; _dataSourceRepository = dataSourceRepository; _dataTypeRepository = dataTypeRepository; _importServiceResolver = importServiceResolver; _dataSourceResolver = dataSourceResolver; }
public void Initialise() { // Data Context and Repositories _db = new AggregateContext(); _repository = new AggregateRepository(_db); _dataSourceRepository = new DataSourceRepository(_db); _dataTypeRepository = new DataTypeRepository(_db); // No parm, currently Enumeration // DataSources and Resolver var renUkHelper = new RenUkHtmlHelper(); _renUkDatasource = new RenUkDataSource(renUkHelper); var snhHelper = new SnhKmlHelper(); _snhDataSource = new SnhDataSource(snhHelper); _dataSourceResolver = new DataSourceResolver(_snhDataSource, _renUkDatasource); // Matching algorithm _coefficientAlgorithm = new DiceCoefficient(); _similarityAlgorithm = new LcSubstr(); _editDistanceAlgorithm = new LevenshteinEditDistance(); _preProcess = new PreProcessor(); _algorithm = new MatchingAlgorithm(_coefficientAlgorithm, 0.9f, _similarityAlgorithm, 0.9f, _editDistanceAlgorithm, 2, _preProcess); // Mapper class _mapper = new ImportAggregateToAggregateMapper(); // Import Services and Resolver _renUkImportService = new RenUkImportService(_repository, _dataSourceRepository, _renUkDatasource, _algorithm, _mapper); _snhImportService = new SnhImportService(_repository, _dataSourceRepository, _snhDataSource, _algorithm, _mapper); _importServiceResolver = new ImportServiceResolver(_snhImportService, _renUkImportService); }
/// <summary> /// Implementation of <see cref="Register" />. /// </summary> /// <param name="context">The data binding context, not null.</param> /// <param name="resolver">The data source resolver, not null.</param> /// <returns>The data binding accessor.</returns> protected abstract IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver);
/// <summary> /// Implementation of <see cref="Register" />. /// </summary> /// <param name="context">The data binding context, not null.</param> /// <param name="resolver">The data source resolver, not null.</param> /// <returns>The data binding accessor.</returns> protected abstract IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver);