在阅读了这个问题的好答案后,我观看了Justin Etheredge的截屏视频.这一切看起来都非常好,只需最少的设置就可以从代码中获得DI.
现在我的问题是:为什么你要使用不使用配置文件的DI框架?这不是使用DI基础设施的重点,以便您可以在构建/发布/无论代码之后改变行为("策略",可以这么说)吗?
任何人都可以给我一个很好的用例,使用像Ninject这样的非配置DI进行验证吗?
这就是我的服务构造器的样子:
public Service(string path)
Run Code Online (Sandbox Code Playgroud)
我正在配置像这样的团结:
IUnityContainer container = new UnityContainer();
container.RegisterType<IService, Service>();
Run Code Online (Sandbox Code Playgroud)
这当然是不正确的.需要指定path参数,我希望可以从AppSettings配置它,所以在这种情况下我可以在配置期间设置它.
我该怎么做呢?
给一个基类Base,我想写一个方法Test,像这样:
private static bool Test(IEnumerable enumerable)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样的测试如果O类型实现的任何接口返回true IEnumerable<X>,其中X从派生Base,所以,如果我这样做:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
if (Test(enumerable))
{
return enumerable.Cast<Base>().Select(b => b.SomePropertyThatIsString);
}
return enumerable.Cast<object>().Select(o => o.ToString());
}
Run Code Online (Sandbox Code Playgroud)
......使用Reflection,它会做正确的事情.我确信这是跨越所有类型接口的问题,找到符合要求的第一个,但我很难找到IEnumerable<>它们之间的通用.
当然,我可以考虑一下:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
return enumerable.Cast<object>().Select(o => o is Base ? ((Base)o).SomePropertyThatIsString : o.ToString());
}
Run Code Online (Sandbox Code Playgroud)
......但是把它想象成一个思想实验.
我目前正在尝试使用WCF数据服务作为一种方式来开放我们的产品,同时能够使用来自AJAX的数据.我注意到的一件事是JSON代表格式将这些__metada成员分散在数据中,并且在OData文档中我发现了这一点(在代表条目下):
可选的"__metadata"名称/值对是唯一应包含在对象上的对,它不直接表示所表示的条目的属性.此名称/值对不是数据,而是按照本文档中定义的约定,指定要表示的条目的元数据.
我的问题是,如果此元数据是可选的,如何将其关闭以节省带宽?
我正在努力通过在内存中缓存更多内容来使我们的应用程序更高效.但是,令我担心的是,我正在阅读的有关大型对象堆如何在垃圾收集过程中没有真正压缩的情况,以及这会导致内存碎片化.
我一直在做一些小测试,但似乎我无法引发这个问题.所以这是我的问题:你能告诉我C#中的代码片段会在某种程度上导致内存碎片导致失败吗?
我正在将我的一个项目从 VS2008 迁移到 VS2010。现在,当我运行测试工具时,我将解决方案中的所有项目都转换为 .NET 4.0(客户端配置文件),几乎所有测试都失败了,但出现以下异常:
System.Security.VerificationException:操作可能会破坏运行时的稳定性。
我一直无法确定发生此异常的原因。当我在调试模式下运行它们时,测试运行得很好。
整个解决方案可在此处下载。
任何人都可以指出我正确的方向吗?
我在这里有点腌菜.
我有一个输出相当静态的操作,直到另一个操作用于更新第一个操作的数据源.我使用HttpResponse.RemoveOutputCacheItem删除该操作的缓存输出,以便下次用户加载时刷新它.
基本上我有这样的动作:
[OutputCache(Duration=86400, Location=OutputCacheLocation.Server)]
public ActionResult Index()
{
return ...
}
Run Code Online (Sandbox Code Playgroud)
在我的HomeController上,另一个控制器上的另一个动作更新了前者使用的信息:
public ActionResult SaveMenu(int id, Menu menu)
{
...
HttpResponse.RemoveOutputCacheItem(Url.Action("Index", "Home"));
...
}
Run Code Online (Sandbox Code Playgroud)
疯狂的是,只要你要么加载URL http://site/或者http://site/Home/Index.当您使用URL时,http://site它永远不会刷新.
这是为什么?
asp.net-mvc caching action-filter asp.net-mvc-3 asp.net-mvc-2
给出以下代码段:
using System;
using Newtonsoft.Json;
namespace JsonTestje
{
class Other
{
public string Message2 { get; set; }
}
class Demo
{
public string Message { get; set; }
public Other Other { get; set; }
}
class Program
{
static void Main(string[] args)
{
var demo = new Demo
{
Message = "Hello, World!",
Other = new Other
{
Message2 = "Here be dragons!"
}
};
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Formatting = Formatting.Indented
}; …Run Code Online (Sandbox Code Playgroud) 考虑我有一个使用三个库 lib1、lib2 和 lib3 的应用程序。在每个库中,我都实现了一个Module注册在该库中实现的依赖项。
其中一些实现有自己的依赖项,例如,lib2 和 lib3 可能都需要 lib1 中存在的一些实现。
我的问题是,我是否让 lib2 和 lib3 中的模块在 lib1 中注册模块作为其Load实现的一部分?如果我的应用程序注册了 lib2 和 lib3 的模块,这是否会注册该模块两次?
或者我是否避免让一个模块注册另一个模块,将它留给应用程序,但缺点是启动时可能会丢失某些注册?
在.NET 2.0(以及我认为更高版本)中,版本容忍序列化将成功地从对象所在的程序集的旧版本反序列化序列化对象.
当我使用十六进制查看器打开这样一个二进制格式化的序列化流时(一个简单的拖放到VS中)我可以看到这个流中包含的汇编信息.
在反序列化期间,是否有检索此信息的方法?例如,这可用于在读取旧内容时将修正应用于已知问题.
更新:看起来它无法完成(除了更改类本身,如Paul Betts的回答,也没有测试过)所以有没有其他方法来读取这个值?是否发布了二进制格式?
我正在尝试通过创建一个静态类来创建一个Html Helper,如下所示:
public static string Crumbs(this HtmlHelper helper, params string[] args) where T : class
{
// ... rest of code goes here.
}
Run Code Online (Sandbox Code Playgroud)
而我正在调用它:
<% Html.Crumbs(
Html.ActionLink("Home", "Index", "Home"),
Html.ActionLink("Lists", "Index", "User"),
Html.Encode(Model.List.Name)); %>
Run Code Online (Sandbox Code Playgroud)
但是,视图无法编译,因为我收到以下编译错误:
CS1061:'System.Web.Mvc.HtmlHelper'不包含'Crumbs'的定义,也没有扩展方法'Crumbs'接受类型'System.Web.Mvc.HtmlHelper'的第一个参数可以找到(你错过了吗?使用指令或程序集引用?)
我不明白.我没有提到你需要在任何地方注册静态类的命名空间的文档.我究竟做错了什么?