public static void InvokeCommandViaJson(string commandString, TextWriter log) { MyDto command = JsonConvert.DeserializeObject <MyDto>(commandString); log.WriteLine($"Id:{command.Id}"); log.WriteLine($"Name:{command.Name}"); }
public void Has_Grid_Column_Style() { var noData = new List <MyDto>(); var row = new MyDto(); Expression <Func <string> > forProperty = () => row.Name; var grid = RenderComponent <BlazorGrid <MyDto> >( Template <MyDto>(nameof(ChildContent), (dto) => (b) => { b.OpenComponent(0, typeof(GridCol <string>)); b.AddAttribute(1, nameof(GridCol <string> .For), forProperty); b.AddMarkupContent(2, "<span></span>"); b.CloseComponent(); b.OpenComponent(2, typeof(GridCol <string>)); b.AddAttribute(1, nameof(GridCol <string> .For), forProperty); b.AddAttribute(3, nameof(GridCol <string> .FitToContent), true); b.AddMarkupContent(4, "<span></span>"); b.CloseComponent(); }) ); var scroller = grid.Find(".grid-scrollview"); var style = scroller.GetAttribute("style"); Assert.AreEqual("grid-template-columns: minmax(auto, 1fr) max-content;", style); }
public void Can_Set_Custom_Attributes() { var row = new MyDto { Name = "Unit test" }; Expression <Func <string> > colFor = () => row.Name; ProviderDelegate <MyDto> provider = (r, _) => { return(ValueTask.FromResult(new BlazorGridResult <MyDto> { TotalCount = 1, Data = new List <MyDto> { row } })); }; var grid = RenderComponent <BlazorGrid <MyDto> >( Parameter(nameof(BlazorGrid <MyDto> .Provider), provider), Template <MyDto>(nameof(ChildContent), (context) => (RenderTreeBuilder builder) => { builder.OpenComponent <GridCol <string> >(0); builder.AddAttribute(1, nameof(GridCol <string> .For), colFor); builder.AddAttribute(2, "title", "Hello world"); builder.CloseComponent(); }) ); var rowElement = grid.FindAll(".grid-row").Last(); rowElement.MarkupMatches("<div class=\"grid-row\"><div title=\"Hello world\">Unit test</div></div>"); }
public static T GetValueOf <T>(MyDto dto, string description) { if (string.IsNullOrEmpty(description)) { throw new InvalidOperationException(); } var props = typeof(MyDto).GetProperties().ToArray(); foreach (var prop in props) { var atts = prop.GetCustomAttributes(false); foreach (var att in atts) { if (att is MyAttributeAttribute) { string value = (att as MyAttributeAttribute).Value; if (description.Equals(value)) { return((T)prop.GetValue(dto, null)); } } } } return(default(T)); }
public override void Setup() { base.Setup(); DtoOne = new FixtureBuilder <MyDto>().With(x => x.Name, "Bob").Object; DtoTwo = new FixtureBuilder <MyDto>().With(x => x.Name, "Frank").Object; DtoThree = new FixtureBuilder <MyDto>().With(x => x.Name, "Bill").Object; }
static void Main(string[] args) { MyDto dto = new MyDto() { Property1 = "Value1", Property2 = "Value2" }; string value = GetValueOf <string>(dto, "attribute1"); // value = "Value1" }
public async Task <MyDto> CreateOnFileSystem(MyDto dto) { var dataFile = await DeserializeDataFile(); dataFile.Data.Add(dto); await SerializeDataFile(dataFile); return(dto); }
/// <summary> /// 测试new实例注册 /// </summary> private void Test03(IServiceCollection services) { var dto = new MyDto(); //只有注册单例生命周期才能直接使用已实例化的对象,这是会将实例对象直接持久化到容器 //以下两种写法相同效果 services.AddSingleton(dto); services.AddSingleton <MyDto>(dto); //以下写法不存在,生命周期为瞬时和域内单例的,注册时只能提供构造方法或委托,不能直接注册实例 //services.AddTransient(dto); //services.AddScoped(dto); }
public IEnumerable <MyDto> GetItems() { IEnumerable <ApiDto> apiDtos = null; lock (theLock) { apiDtos = api.GetNonThreadSafeItems(); } foreach (var apiDto in apiDtos) { var myDto = new MyDto(apiDto.Name); yield return(myDto); } }
public void Uses_Display_Name_As_Caption() { var row = new MyDto { }; var parent = new Mock <BlazorGrid <MyDto> >(); Expression <Func <string> > colFor = () => row.NameWithCaption; var col = RenderComponent <GridCol <string> >( Parameter("For", colFor), CascadingValue("Parent", parent) ); var caption = col.Instance.GetCaptionOrDefault(); Assert.AreEqual("My caption", caption); }
public void Can_Set_Custom_Caption() { var row = new MyDto { }; var parent = new Mock <BlazorGrid <MyDto> >(); Expression <Func <string> > colFor = () => row.Name; var col = RenderComponent <GridCol <string> >( Parameter("For", colFor), Parameter("Caption", "Unit test"), CascadingValue("Parent", parent) ); var caption = col.Instance.GetCaptionOrDefault(); Assert.AreEqual("Unit test", caption); }
public void Example_construct_using() { IMapper mapper = new MapperConfiguration(builder => { builder.CreateMap <MyModel, MyDto>(); builder.CreateMap <MyDto, MyModel>() .ConstructUsing(x => new MyModel(x.Id, x.Value)); }) .CreateMapper(); const int value = 5; MyDto destination = mapper.Map <MyDto>(new MyModel(1, value)); MyModel source = mapper.Map <MyModel>(destination); source.Value.Should().Be(value); destination.Value.Should().Be(value); }
public void Example_ctor_param() { IMapper mapper = new MapperConfiguration(builder => { builder.CreateMap <MyModel, MyDto>(); builder.CreateMap <MyDto, MyModel>() .ForCtorParam("identifier", x => x.MapFrom(e => e.Id)); }) .CreateMapper(); const int value = 78; MyDto destination = mapper.Map <MyDto>(new MyModel(1, value)); MyModel source = mapper.Map <MyModel>(destination); source.Value.Should().Be(value); destination.Value.Should().Be(value); }
public void Can_Merge_Css_Classes() { int providerCallCount = 0; ProviderDelegate <MyDto> provider = (BlazorGridRequest r, CancellationToken c) => { providerCallCount++; return(ValueTask.FromResult(new BlazorGridResult <MyDto> { Data = Enumerable.Repeat(new MyDto(), 3).ToList(), TotalCount = 3 })); }; Services.AddSingleton <IBlazorGridConfig>(new Config.DefaultConfig()); Services.AddSingleton <NavigationManager>(new MockNav()); var row = new MyDto { Name = "Unit test" }; Expression <Func <string> > colFor = () => row.Name; var grid = RenderComponent <BlazorGrid <MyDto> >( Parameter(nameof(BlazorGrid <MyDto> .Provider), provider), Template <MyDto>(nameof(ChildContent), (context) => (RenderTreeBuilder builder) => { builder.OpenComponent <GridCol <string> >(0); builder.AddAttribute(1, nameof(GridCol <string> .For), colFor); builder.AddAttribute(2, "class", "my-custom-class"); builder.AddAttribute(3, nameof(GridCol <string> .AlignRight), true); builder.CloseComponent(); }) ); Assert.AreEqual(1, providerCallCount); var rowElement = grid.FindAll(".grid-row").Last(); rowElement.MarkupMatches("<div class=\"grid-row\"><div class=\"text-right my-custom-class\">Unit test</div></div>"); }
public void Uses_Display_Name_As_Caption_With_Resources(string locale, string expectedCaption) { var row = new MyDto { }; var parent = new Mock <BlazorGrid <MyDto> >(); Expression <Func <string> > colFor = () => row.NameWithResourceCaption; var culture = CultureInfo.GetCultureInfo(locale); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; var col = RenderComponent <GridCol <string> >( Parameter("For", colFor), CascadingValue("Parent", parent) ); var caption = col.Instance.GetCaptionOrDefault(); Assert.AreEqual(expectedCaption, caption); }
public void Header_Ignores_Custom_Attributes() { var row = new MyDto { Name = "Unit test" }; Expression <Func <string> > colFor = () => row.Name; var grid = RenderComponent <BlazorGrid <MyDto> >( Template <MyDto>(nameof(ChildContent), (context) => (RenderTreeBuilder builder) => { builder.OpenComponent <GridCol <string> >(0); builder.AddAttribute(1, nameof(GridCol <string> .For), colFor); builder.AddAttribute(2, "title", "Hello world"); builder.CloseComponent(); }) ); var rowElement = grid.FindAll(".grid-row").First(); rowElement.MarkupMatches("<header class=\"grid-row grid-header\"><div class=\"sortable\"><span class=\"blazor-grid-sort-icon\"></span></div></header>"); }
private static async Task SendSmallMessages(int count) { WriteLine($"Waiting 5 seconds for {count} small message requests"); await Task.Delay(5000); await _client.SendAsync(new StartTimerMessage(count), Serializer); for (int i = 0; i < count; i++) { var dto = new MyDto() { Collision = Guid.NewGuid(), Id = i, Name = $"MyDto{i}", When = DateTime.Now }; await _client.SendAsync(dto, Serializer); } await _client.SendAsync <StopTimerMessage>(Serializer); }
private void Button_Click_1(object sender, RoutedEventArgs e) { var obj = new MyDto { Foo = "abc", Bar = 234 }; var clone = Serializer.DeepClone(obj); ((Button)sender).Content = clone.Foo + ", " + clone.Bar; }
public string DoSomething(MyDto data) { return(string.Format("I did something at {0} with {1}", DateTime.Now, data.MyProperty)); }
public MyDtoEventArgs(MyDto myDto) { this.MyDto = myDto; }
/// <summary> /// 构造注入 /// </summary> /// <param name="myDto1"></param> /// <param name="myDto2"></param> public Test05Controller(MyDto myDto1, OtherDto otherDto) { _myDto1 = myDto1; _otherDto = otherDto; }
public async Task WriteAsync(MyDto dto) { await channel.Writer.WriteAsync(dto); }
/// <summary> /// 构造注入 /// </summary> /// <param name="myDto1"></param> /// <param name="myDto2"></param> public Test04Controller(MyDto myDto1, MyDto myDto2) { _myDto1 = myDto1; _myDto2 = myDto2; }
protected bool Equals(MyDto other) { return string.Equals(Lastname, other.Lastname) && string.Equals(Firstname, other.Firstname); }
public static void InvokeCommandViaDtoError(MyDto command, TextWriter log) { log.WriteLine($"Id:{command.Id}"); log.WriteLine($"Name:{command.Name}"); }
public void UpdateDTO(MyDto dto) { // For update or delete, wrap the calls to the remote // service in your RIA services like this. RemoteWCF.UpdateMethod(dto); }
public void Can_Modify_Columns() { var row = new MyDto(); Expression <Func <string> > colFor = () => row.Name; var grid = RenderComponent <BlazorGrid <MyDto> >( Template <MyDto>(nameof(ChildContent), (context) => (RenderTreeBuilder builder) => { builder.OpenComponent <GridCol <string> >(0); builder.AddAttribute(1, nameof(GridCol <string> .For), colFor); builder.AddAttribute(2, "Caption", "Name"); builder.CloseComponent(); builder.OpenComponent <GridCol <string> >(3); builder.AddAttribute(4, nameof(GridCol <string> .For), colFor); builder.AddAttribute(5, "Caption", "Also name"); builder.CloseComponent(); }) ); // Verify that two columns are rendered var rowElement = grid.FindAll(".grid-row").First(); rowElement.MarkupMatches("<header class=\"grid-row grid-header\">" + "<div class=\"sortable\">Name<span class=\"blazor-grid-sort-icon\"></span></div>" + "<div class=\"sortable\">Also name<span class=\"blazor-grid-sort-icon\"></span></div>" + "</header>" ); VerifyColumnCount(grid, 2); // Change the ChildContent to only contain one column grid.SetParametersAndRender( Template <MyDto>(nameof(ChildContent), (context) => (RenderTreeBuilder builder) => { builder.OpenComponent <GridCol <string> >(0); builder.AddAttribute(1, nameof(GridCol <string> .For), colFor); builder.AddAttribute(2, "Caption", "Name"); builder.CloseComponent(); }) ); Assert.AreEqual(3, grid.RenderCount); // Verify that only one column is rendered rowElement = grid.FindAll(".grid-row").First(); rowElement.MarkupMatches("<header class=\"grid-row grid-header\">" + "<div class=\"sortable\">Name<span class=\"blazor-grid-sort-icon\"></span></div>" + "</header>" ); VerifyColumnCount(grid, 1); // Change it back to two columns grid.SetParametersAndRender( Template <MyDto>(nameof(ChildContent), (context) => (RenderTreeBuilder builder) => { builder.OpenComponent <GridCol <string> >(0); builder.AddAttribute(1, nameof(GridCol <string> .For), colFor); builder.AddAttribute(2, "Caption", "Name"); builder.CloseComponent(); builder.OpenComponent <GridCol <string> >(3); builder.AddAttribute(4, nameof(GridCol <string> .For), colFor); builder.AddAttribute(5, "Caption", "Also name"); builder.CloseComponent(); }) ); Assert.AreEqual(5, grid.RenderCount); // Verify that two columns are rendered rowElement = grid.FindAll(".grid-row").First(); rowElement.MarkupMatches("<header class=\"grid-row grid-header\">" + "<div class=\"sortable\">Name<span class=\"blazor-grid-sort-icon\"></span></div>" + "<div class=\"sortable\">Also name<span class=\"blazor-grid-sort-icon\"></span></div>" + "</header>" ); VerifyColumnCount(grid, 2); }