看起来它应该足够简单,但我很难将我的大脑缠绕在它周围.通常,您可以通过几种方式之一声明对象
ClassName a;
a = new ClassName();
Run Code Online (Sandbox Code Playgroud)
要么
ClassName a = new ClassName();
Run Code Online (Sandbox Code Playgroud)
等等...
但是因为你在编译时明确地声明了这些,所以当我想要在运行时将其编码时,我会感到困惑.我想要做的是在单击按钮时实例化一个新的Class实例.但是我在这里没有理解的是,如果按钮点击发生这种情况,对象名称将如何被命名?
我应该使用oracle中的数据类型来存储注释框?我打算使用LONG但它只允许一个.或者我应该使用VARCHAR2并将其设置得非常大?
似乎是一个明显的问题,但我仍然感到困惑.我在页面上有一个asp FileUpload控件,它也恰好位于UpdatePanel中.我将UpdatePanel设置为UpdateMode ="Conditional".我还在触发器部分设置了回发触发器(不是asyncpostback触发器).在按钮单击时,它应该将文件上载到数据库中,在我的数据层中处理.在第一次尝试时,它将失败,因为PostedFile为null,但您看到该页面执行回发(其本身清除/重置下载控件).当我再次尝试上传文件时,它很好.我的第一个想法是因为它需要回发才能真正抓住字节,对吧?好吧,所以根据这个逻辑,我想如果我试图上传一个不同的文件,那么它实际上会上传以前的文件.它没; 它上传了新文件.所以这就是我困惑的地方.
这是上传方法:
protected void ReplaceDoc()
{
var data = ulReplaceDoc.FileBytes;
var fileName = ulReplaceDoc.PostedFile.FileName;
if (MocApi.ReplaceWorkingDocument(_request.MocRequestID, _currentUser, fileName, data))
{
//refresh files
ShowFiles();
}
}
Run Code Online (Sandbox Code Playgroud)
挺直的.它应该抓取文件,上传它(在数据库上运行UPDATE查询以更改文件),然后刷新数据源以显示新文件.
所以我的问题是:为什么它只在第一次尝试失败?另外,实现这种效果的更好方法是什么?
我试图完成自定义控件的教程,我发现的所有教程都说你必须选择一个名为"windows control library"的项目模板.我没有那个模板作为选项!我正在使用VS2010专业版.有任何想法吗?
我有一个字典,我正在使用它来促进基于api版本号的内部路由.基本上发生的是我在字典中查找和操作并尝试调用它的RUN方法.但为了做到这一点,我需要能够将对象转换为它的接口.这就是我的意思,这是字典:
public Dictionary<string, Type> Routing = new Dictionary<string, Type>();
public VersionRouter()
{
Routing.Add("1.0", typeof(OperationV1<RequestObjectV1, ResponseObjectV1>));
Routing.Add("2.0", typeof(OperationV1<RequestObjectV2, ResponseObjectV1>));
Routing.Add("3.0", typeof(OperationV1<RequestObjectV2, ResponseObjectV2>));
}
Run Code Online (Sandbox Code Playgroud)
我可以抓住我想要实例化的正确类型:
var myOperation = Routing["2.0"];
Run Code Online (Sandbox Code Playgroud)
然后在正常情况下,我只是实例化并将其转换为:
var myInstance = (MyInterface) Activator.CreateInstance(myOperation);
Run Code Online (Sandbox Code Playgroud)
但是,接口是通用的,因为它需要知道Request和Response类型是什么:
var myInstance = (MyInterface<TRequest, TResponse>) Activator.CreateInstance(myOperation);
Run Code Online (Sandbox Code Playgroud)
我不知道如何告诉它在这个阶段的请求和响应类型是什么.我假设它可以用反射来完成.我发现我可以通过像myOperation.GetGenericArguments()之类的东西来获取那些通用参数,但是我不知道如何在这个阶段使用它对我有利.有谁知道如何做到这一点?
我在Web API项目中创建了一个辅助类,所以我有点被HttpRequestMessage和HttpResponseMessage所困扰,或者至少看起来如此。我已经生成了要发送回HttpResponseMessage的eTag,但是由于WCF以来我只使用CheckConditionalRetrieve(),因此一切都发生了变化,因此我不确定将其添加到对象中的位置。
我的问题是,我有我的eTag ...大声笑...在哪里使用HttpResponseMessage放置它?
TIA

正如您所看到的,我尝试将Thread的CurrentCulture捕获到一个实例变量,以便我可以通过类重用它,但它不会持久化.在上面的照片中,我表明即使在分配之后,值仍然不同.为什么是这样?
所以我仍然试图理解async/await模式,但我也试图实现以下行为:
方法A调用方法B,该方法B运行许多进程.其中一些进程可以在不同的线程上运行,而其他事情正在处理中,这样它们的返回值将在需要时更接近.在完成所有这些过程之前,方法B不需要将控制权返回给调用者.
这是我正在使用的测试代码:
static void Main(string[] args)
{
CallProc();
Console.WriteLine("Program finished");
Console.ReadKey();
}
public static async Task CallProc()
{
var two = Task.Factory.StartNew(() => SomeSynchronousProcessIDontOwn(5000, "two"));
var one = Task.Factory.StartNew(() => SomeSynchronousProcessIDontOwn(500, "one"));
var three = Task.Factory.StartNew(() => SomeSynchronousProcessIDontOwn(1500, "three"));
// some process happens here
var oneMessage = await one; // waits until one finishes and then snags it's value
Console.WriteLine("Got message {0}", oneMessage);
// some more stuff happens here
var twoMessage = await two; // waits until two is …Run Code Online (Sandbox Code Playgroud) 因此激活器返回的类型(此处未显示)只是我创建的POCO.没什么特别的.但是尽管如此,返回的返回类型GetWrapper或GetWrapper<T>返回的对象是动态类型的,因此intellisense不会看到返回的实际类的属性.有任何想法吗?

更新:对不起,乔恩:
public static T GetWrapper<T>(object type, dynamic obj)
where T : class, IRedditObject
{
return GetWrapper(type, obj) as T;
}
public static object GetWrapper(object type, dynamic obj)
{
return Activator.CreateInstance(Types[type.ToString()], obj);
}
public class LinkWrapper : IRedditObject
{
private readonly dynamic _link;
public string Kind { get { return "t3"; } }
public dynamic Data { get { return _link.data; } }
public LinkWrapper(dynamic link)
{
_link = link;
}
public string Domain { get …Run Code Online (Sandbox Code Playgroud) 所以我仍然想要达到那个"啊哈!" 聚合和聚合根的时刻(什么是新的,对吧?)我看到Martin Fowler说了以下内容:
聚合将其组件对象之一作为聚合根.来自聚合外部的任何引用都应该只转到聚合根.因此,根可以确保整个聚合体的完整性.
所以我正在读这个,因为聚合是父对象,并且聚合中的一个对象被选为聚合根.此聚合之外的任何内容都只能包含对根的引用.这对我来说很困惑.如果根是聚合的一部分,它如何确保任何东西?
我的理解是聚合的整个目的是:a)充当域对象(值对象和其他聚合)的逻辑分组,b)充当事务边界,所有与聚合的交互必须发生,并且回购只处理聚合.但是说我有这样的聚合:
public class UserInventory
{
private List<InventoryItem> _inventoryItems;
// the aggregate root
public User User { get; }
public ReadOnlyCollection<InventoryItem> Inventory => _inventoryItems;
public UserInventory(User root, IEnumerable<InventoryItem> inventory)
{
User = root;
_inventoryItems = inventory;
}
public void UpdateItemDescription(Guid itemId, ItemDescription newDescription)
{
_inventoryItems.Single(i => i.Id == itemId).Description = newDescription;
DomainEvents.Notify(new InventoryItemUpdated(User));
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我的应用层想要更改特定库存项目的描述,因此,由于它不应该直接与库存项目对话,因此我会公开UpdateItemDescription(Guid, ItemDescription)控制此过程,因为这将是聚合强制执行任何不变量的机会(为了清楚起见我遗漏了
我觉得这是一个很好的聚合示例,但我不明白聚合根在这里如何为"确保完整性"做任何事情.我看过C#DDD示例应用程序,但我找不到任何明显的问题答案,但可以在答案中引用它.
任何人都可以澄清吗?我错过了什么或误解了什么吗?
c# ×8
.net ×3
asp.net ×2
asynchronous ×2
async-await ×1
block ×1
comments ×1
debugging ×1
dynamic ×1
generics ×1
localization ×1
oracle ×1
reflection ×1
runtime ×1
templates ×1
text ×1
winforms ×1