我有这门课:
public class MyClass
{
public MyClass() { Secret = "Don't tell me"; }
public string Name { get; set; }
public int Age { get; set; }
public string Description { get; set; }
private string Secret { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而这个WEB API方法:
// POST api/fixture
public HttpResponseMessage Post(MyClass value)
{
return new HttpResponseMessage(HttpStatusCode.Created);
}
Run Code Online (Sandbox Code Playgroud)
我已将Web API设置为返回JSON而不是XML,并且我没有对默认配置进行任何其他更改.我正在尝试使用Firefox的RESTClient扩展来测试此方法.这是我的要求:
POST localhost:XXXX/api/fixture
Content-Type: application/json
Accept: application/json
Content-Length: 60
{
value : { "Name":"Cosby","Age":"13","Description":"OK" }
}
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
{"Message":"此资源不支持请求实体的媒体类型'text/plain'.","ExceptionMessage":"没有MediaTypeFormatter可用于从媒体类型'文本的内容中读取'MyClass'类型的对象/plain'.","ExceptionType":"System.Net.Http.UnsupportedMediaTypeException","StackTrace":"at System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,类型类型,IEnumerable
1 formatters, …
我刚才注意到在Couchdb 2.0 的发行说明中,提到Mango查询建议用于新的应用程序.还有人提到,Mango索引显然比javascript查询快2到x10,这让我感到很惊讶,因此我有很多问题:
我们建议所有新应用都默认使用Mango.
我主要关注的是一方面有关芒果的一些见解,另一方面,概述芒果和地图/减少应该如何在2.x时代共同生活.
我有以下型号:
public abstract class AbstractBase { }
public abstract class AbstractBase<T> : AbstractBase where T : SomeOtherTypeBase
{
T MyProp {get; set;}
}
public class Concrete1 : AbstractBase<OtherTypeSpecializationFor1> { }
public class Concrete2 : AbstractBase<OtherTypeSpecializationFor2> { }
Run Code Online (Sandbox Code Playgroud)
但是实体框架给了我错误:
抽象类型AbstractBase没有映射的后代,因此无法映射
在我看来,这不应该发生,因为AbstractBase直接继承自AbstractBase和Concrete1/2这些具体继承自GenericAbstractBase的类.这里发生了什么 ?
另外,出于好奇,我想知道GenericAbstractBase中T类型的属性是否会被EF保留,以防有人经过时考虑到答案.
更新1
任何人都可以确认这是EF支持吗?我已经看过这篇文章了,根据罗文的回答,这应该是这样的.谢谢
更新2 通用基类不是抽象时的相同问题.
每比特一点,我是不成熟的,并且对ASP.NET MVC4越来越熟练.但是,我仍然没有在这个非常重要的问题上清楚地表明这一点.让我们说我有一个模型:
public class WorkPaper
{
public int WorkPaperID { get; set; }
public string name { get; set; }
public string description {get ; set; }
public bool verified {get; set;}
public DateTime dateAdded {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我使用此模型与实体框架代码第一种方法,我有以下数据库上下文:
public class NicodemeContext : DbContext
{
public DbSet<WorkPaper> Workpapers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是:什么是模型层以及什么是数据访问层.对我来说,WorkPaper类往往是DAL的一部分,因为我设计它并选择我的属性名称和类型(导航属性等...)以适应EF模式.但问题是,如果我是对的,我真的不知道应该把业务逻辑放在哪里.
在这种特定情况下,如果我想添加一条规则,说明如果尚未经过验证就无法发送工作文件,而另一条规则说如果超过2周之前已添加工作文件则无法提交(奇怪的规则)但那只是一个例子).我应该在哪里添加它们?我是否必须创建另一个类,但是我应该把它放在哪里以及它应该包含什么?对于我已经拥有的课程,这不是很多余吗?但另一方面,由于该类是"面向数据库",在那里添加业务规则不是很麻烦吗?
我的观点是真正理解我必须放置业务逻辑并理解DAL和模型之间的区别.我很难识别DAL和模型层,因为它们看起来与我非常相似.我想以正确的方式做事.
(基本上,我不知道在哪里用MVC编写"我的程序"!一旦我想编写我真正感兴趣的功能,我就不舒服了.我觉得我做的不对)
我正在为IUserStore编写一个自定义实现.create方法的签名是:
public async virtual Task CreateAsync(TUser user)
Run Code Online (Sandbox Code Playgroud)
考虑到Microsoft.AspNet.Identity中的核心接口IUserStore(这是相同的),这是有道理的.
但是,Microsoft.AspNet.Identity中定义的UserManager类的接口是:
public virtual Task<IdentityResult> CreateAsync(TUser user);
Run Code Online (Sandbox Code Playgroud)
我的问题是我没有看到我应该如何将此IdentityResult传递给UserManager,因为商店中的返回类型只是"任务".我有一个自定义逻辑来确定是否可以创建用户,所以我真的需要将CreateAsync的结果告诉UserManager.
任何的想法 ?
我有很多代码看起来像这样:
MyWindow window = new MyWindow(someParam, callingWindow)
Run Code Online (Sandbox Code Playgroud)
MyWindow类包含类似的东西:
public MyWindow.Processing()
{
` // Do processing
...
callingWindow.RefreshListBox(); // Listbox for example
}
Run Code Online (Sandbox Code Playgroud)
有没有内置的方法来等待关闭窗口.我希望能够在callingWindow的类中编写类似的东西:
await mywindowInstanceCloseEvent;
RefreshListBoxWhenWindowIsClosed();
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法来"暂停"一个方法(无论是否异步),直到特定窗口关闭.
我在程序集 C 中有以下内容:
public interface InterfaceA
{
string Data {get; }
}
public interface InterfaceB
{
InterfaceA DoStuff();
}
public interface InterfaceC
{
IEnumerable<InterfaceA> GetStuffThatHaveBeenDone();
}
Run Code Online (Sandbox Code Playgroud)
InterfaceB 的一个实现称为 Doer,在程序集 A(这是主项目)中定义。类似地,AssemblyA 中定义了 InterfaceA 的实现,但程序集 B 对这些实现一无所知。
程序集 B 将由外部公司开发,并将由程序集 A 引用(不是动态的,在设计时)。该公司的目的是编写 InterfaceC 的实现。
情况如下:我想阻止外部公司创建自己的 InterfaceA 实现并将其放入 InterfaceC.GetStuffThatHaveBeenDone() 返回的列表中。预期用法是:它们调用 InterfaceB.DoStuff(),获取 InterfaceA 的实例,并将其添加到它们将返回的列表中。
我必须对 InterfaceC.GetStuffThatHaveBeenDone() 返回的列表中包含的对象的类型做出假设。我知道它们都具有仅在程序集 A 中定义的特定类型。因此,我试图确保这些对象只会在程序集 A 中创建,并且我想在编译时强制执行此操作以避免发现 MyCustomImplementionOfA 对象在列表中。
因此,我试图找出如何防止接口在另一个程序集中实现。我想也许可以通过稍微重新思考我的设计来解决这个问题,但我似乎没有找到。
谢谢
我已经看到了这个问题,我想知道是否有任何技术理由可以证明gcc支持Java但不支持C#.如果我理解,Java也是一种解释性语言.如果Mono提供C#编译器和CIL的实现,为什么不能创建一个将C#转换为IL然后静态编译的gcc c#编译器?
这些天我经常面临这种情况,我正在寻找一个优雅的解决方案。我有 :
public abstract class TypeA
{
public abstract void AbtractMethod(IDependency dependency);
}
public class TypeB : TypeA
{
public override void AbtractMethod(ISpecializedDependencyForB dependency) { }
}
public class TypeC : TypeA
{
public override void AbtractMethod(ISpecializedDependencyForC dependency) { }
}
public interface IDependency { }
public interface ISpecializedDependencyForB : IDependency { }
public interface ISpecializedDependencyForC : IDependency { }
Run Code Online (Sandbox Code Playgroud)
我的目标是在客户端的角度使事情变得透明,并像这样使用这段代码:
TypeA myDomainObject = database.TypeARepository.GetById(id); // The important point here is that I don't know if the object is of …Run Code Online (Sandbox Code Playgroud) 给定以下课程
public class Person
{
public string Name { get; }
public List<Person> Friends { get; }
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种在使用 Expression> 时获取以下字符串“Friends.Name”的方法。
这是我想要做的伪代码:
Expression<Func<Person,string>> exp = x => x.Friends.Name
Run Code Online (Sandbox Code Playgroud)
由于明显的原因,这不会编译。
我怎样才能做到这一点?即使您没有代码,通用方法也能解决问题,因为我对此缺乏灵感。
谢谢
我仔细研究了这个问题,最接近我的情况并未解决我的担忧.
我有以下课程:
public abstract class BaseClass
{
}
public class ConcreteClass
{
}
Run Code Online (Sandbox Code Playgroud)
序列化和反序列化的设置对象如下:
JsonSerializerSettings _serializationSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
TypeNameHandling = TypeNameHandling.All,
ContractResolver = new CloudantContractResolver(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
Run Code Online (Sandbox Code Playgroud)
我试图像这样反序列化:
var myDeserializedObject = JsonConvert.DeserializeObject<BaseClass>(jsonString, _serializationSettings);
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我收到了错误
无法创建BaseClass类型的实例.Type是接口或抽象类,无法实例化.
即使根Json对象确实有$type属性.我已经尝试反序列化到a JObject然后使用JObject.To<BaseType>(),但我有相同的结果.我需要使用这种方法,并且不希望使用自定义转换器,因为我在所有地方使用多态.
您对我如何使这种反序列化工作有任何想法吗?
更新10/10/15
我还在调查,我认为问题可能是当我检查JObject我的反序列化对象时,第一个属性是_id属性:
我假设,因为错误消息是:
JSON.NET可能需要首先读取类型以实例化正确的对象.我没有看到如何_id从下面提供的单独项目中首先重现这种情况.我尝试了几种嵌套复杂属性的组合,但我总是有第$type一个.这可能就是为什么它在那里工作得很好.
我试图CreateProperties在ContractResolver上组合覆盖:
protected override System.Collections.Generic.IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
{
var properties …Run Code Online (Sandbox Code Playgroud) 我有以下WebJob:
static void Main(string[] args)
{
Bootstrap(); //IoC container config
System.Diagnostics.Trace.TraceInformation("Entering the main loop");
while (true)
{
OrdersFetcher.DoWork();
}
}
public static class OrdersFetcher
{
const int MINIMUM_NUMBER_OF_SECONDS_BETWEEN_FETCHES = 10;
static DateTime _lastFetchDate = DateTime.UtcNow.AddSeconds(int.MinValue);
static bool _currentlyRunning = false;
public static void DoWork()
{
if (DateTime.UtcNow - _lastFetchDate < TimeSpan.FromSeconds(MINIMUM_NUMBER_OF_SECONDS_BETWEEN_FETCHES))
return;
if (_currentlyRunning)
return;
_currentlyRunning = true;
_lastFetchDate = DateTime.UtcNow;
Task.Factory.StartNew(() => { FetchOrders(); }).ContinueWith((task) =>
{
_currentlyRunning = false; Console.WriteLine("**** Orders Fetching Ended ****");
});
}
private static …Run Code Online (Sandbox Code Playgroud) 如果我有 :
public enum MyEnum
{
A = 0x01,
B = 0x10,
C = 0x100
}
MyEnum MyProp {get; set;}
// ....
Run Code Online (Sandbox Code Playgroud)
而我在某处做:
bool isTrue = MyProp == (A | B)
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可以用作以下的快捷方式:
bool istrue = MyProp == A || MyProp == B.
Run Code Online (Sandbox Code Playgroud)
我知道在这种情况下| 是按位运算符,但我想知道C#将如何解释结果.我想这个特定的用例可能会有一些覆盖或者无论如何我曾经在几个地方使用过,而不知道作者究竟打算做什么.
c# ×11
.net ×1
asp.net-mvc ×1
async-await ×1
azure ×1
couchdb ×1
gcc ×1
json ×1
json.net ×1
lambda ×1
oop ×1
polymorphism ×1
wpf ×1