使用asp.net mvc中的属性进行验证非常好.[Range(min, max)]
到目前为止,我一直在使用验证器来检查值,例如:
[Range(1, 10)]
public int SomeNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是 - 现在我需要分别检查最小和最大条件.我希望找到这样的属性:
[MinValue(1, "Value must be at least 1")]
[MaxValue(10, "Value can't be more than 10")]
public int SomeNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
是否有任何预定义的属性来写这个?或者我如何实现这一目标?
我听说过关于NServiceBus的讨论,但我还没有真正理解它是什么.他们声称自己是".net最受欢迎的开源服务总线".
所以; 什么是"服务巴士",什么时候需要?
我在我的解决方案中创建了一个WCF服务库项目,并提供了对此的服务引用.我使用类库中的服务,所以除了类库之外,我还有来自WPF应用程序项目的引用.服务直接设置 - 仅更改为获取异步服务功能.
一切都很好 - 直到我想更新我的服务参考.它失败了,所以我最终回滚并重试,但即便如此也失败了!因此 - 更新服务引用失败而不对其进行任何更改.为什么?!
我得到的错误就是这个:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
Run Code Online (Sandbox Code Playgroud)
警告提供了更多信息:
Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the
following types. Only matching types …
Run Code Online (Sandbox Code Playgroud) 它是LINQ结果的事实可能与问题无关,但无论如何我都提到它 - 因为这是导致这个问题的背景.
我运行LINQ查询.结果是;
IEnumerable<MyClass>
Run Code Online (Sandbox Code Playgroud)
我想把结果放到一个ObservableCollection中;
ObservableCollection<MyClass>
Run Code Online (Sandbox Code Playgroud)
我怎么做这个演员?(没有运行IEnumerable并将元素复制到ObservableCollection).我注意到LINQ有一些To ..()函数,但它似乎没有帮助我这个演员..?
我有一个服务器端类,我通过[DataContract]在客户端提供.这个类有一个readonly字段,我想通过一个属性提供.但是,我无法这样做,因为似乎我不允许在没有get和set的情况下添加[DataMember]属性.
那么 - 有没有一种方法可以在没有setter的情况下拥有[DataMember]属性?
[DataContract]
class SomeClass
{
private readonly int _id;
public SomeClass() { .. }
[DataMember]
public int Id { get { return _id; } }
[DataMember]
public string SomeString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或将溶液中使用[数据成员]作为字段- (例如像显示在这里)?尝试这样做,但它似乎并不关心该领域是readonly ..?
编辑:这是通过黑客攻击这样做的唯一方法来制作一个只读属性吗?(不 - 我不想这样做......)
[DataMember]
public int Id
{
get { return _id; }
private set { /* NOOP */ }
}
Run Code Online (Sandbox Code Playgroud) 我一直在使用RhinoMocks,但刚开始研究Moq.我有这个非常基本的问题,令我感到惊讶的是,这并不是开箱即用的.假设我有以下类定义:
public class Foo
{
private IBar _bar;
public Foo(IBar bar)
{
_bar = bar;
}
..
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个测试,我需要模拟发送到Foo的IBar.在RhinoMocks中,我会像下面这样做,它会很有效:
var mock = MockRepository.GenerateMock<IBar>();
var foo = new Foo(mock);
Run Code Online (Sandbox Code Playgroud)
但是,在Moq中,这似乎并没有以同样的方式起作用.我这样做:
var mock = new Mock<IBar>();
var foo = new Foo(mock);
Run Code Online (Sandbox Code Playgroud)
然而,现在它失败了 - 告诉我"无法从'Moq.Mock'转换为'IBar'.我做错了什么?用Moq做这个的推荐方法是什么?
我需要在NUnit单元测试中使用一些WPF组件.我通过ReSharper运行测试,并在使用WPF对象时失败并出现以下错误:
System.InvalidOperationException:
调用线程必须是STA,因为许多UI组件都需要这个.
我已经读过这个问题了,听起来这个线程需要是STA,但我还没想出如何做到这一点.触发此问题的原因是以下代码:
[Test]
public void MyTest()
{
var textBox = new TextBox();
textBox.Text = "Some text"; // <-- This causes the exception.
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Unity IoC容器来解析我的对象.但是,我遇到了一个问题.当我有多个构造函数时 - Unity如何知道使用哪一个?当我有一个和一个没有时,它似乎使用带参数的那个.我可以明确告诉它使用哪个构造函数吗?
具体来说,我有一个类似于以下带有两个构造函数的Person类的情况.在这种情况下,我希望IoC容器使用默认构造函数 - 没有参数 - 但它选择带参数的容器.
public class SomeValueObject
{
public SomeValueObject(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Person
{
private string _name;
public Person()
{
_name = string.Empty;
}
public Person(SomeValueObject obj)
{
_name = obj.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
这显然失败了,因为它无法创建SomeValueObject - 不知道要向其字符串参数注入什么.它给出的错误是:
解决依赖关系失败,type ="MyApp.Person",name ="".异常消息是:当前构建操作(构建密钥Build Key [MyApp.Person,null])失败:尝试调用构造函数MyApp.Person(MyApp.SomeValueObject obj)时无法解析参数obj.(策略类型BuildPlanStrategy,索引3)
集装箱登记:
Container.RegisterType<Person, Person>(new Microsoft.Practices.Unity.ContainerControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud)
并解决:
var person = Container.Resolve<Person>();
Run Code Online (Sandbox Code Playgroud) 我是NHibernate的新手,在过早关闭会话时遇到了一些问题.我通过重用会话而不是每个事务打开一个会话来暂时解决了这个问题.但是,我的印象是,每次需要时打开会话都是会话生命周期管理的推荐方法.没有?
所以; 推荐的会话方式是什么?他们的一生应该是什么?一次会议交易?一个单一的会议来处理一切?或者是什么?
编辑:
请注意,我的应用程序体系结构是与服务器端服务通信的桌面应用程序,这是使用NHibernate + Fluent进行的所有数据库处理.(如果这有任何区别......)
在我的WPF应用程序中,我做了一些异步通信(与服务器).在回调函数中,我最终从服务器的结果创建InkPresenter对象.这要求运行的线程是STA,显然它当前不是.因此我得到以下异常:
无法创建在程序集中定义的'InkPresenter'实例[...]调用线程必须是STA,因为许多UI组件都需要这样做.
目前我的异步函数调用是这样的:
public void SearchForFooAsync(string searchString)
{
var caller = new Func<string, Foo>(_patientProxy.SearchForFoo);
caller.BeginInvoke(searchString, new AsyncCallback(SearchForFooCallbackMethod), null);
}
Run Code Online (Sandbox Code Playgroud)
如何进行回调 - 这将创建InkPresenter - 是STA吗?或者在新的STA线程中调用XamlReader解析.
public void SearchForFooCallbackMethod(IAsyncResult ar)
{
var foo = GetFooFromAsyncResult(ar);
var inkPresenter = XamlReader.Parse(foo.Xaml) as InkPresenter; // <!-- Requires STA
[..]
}
Run Code Online (Sandbox Code Playgroud) .net ×6
c# ×5
wpf ×3
wcf ×2
casting ×1
datacontract ×1
datamember ×1
lifetime ×1
linq ×1
mocking ×1
moq ×1
nhibernate ×1
nservicebus ×1
nunit ×1
readonly ×1
resharper ×1
servicebus ×1
session ×1
sta ×1
unit-testing ×1
validation ×1