小编Ben*_*ter的帖子

从System.Drawing.Image.RawFormat获取ImageFormat

尝试呼叫时此代码失败Image.Save(MemoryStream, ImageFormat).

我得到了例外:

a值不能为null.参数名称:encoder"

ImageFormat format = generatedImage.RawFormat as ImageFormat;
image.ImageData = generatedImage.Save(format);
Run Code Online (Sandbox Code Playgroud)

如果我ImageFormat直接传入一个对象,它就可以工作了ImageFormat.Jpeg.

什么是转换的最佳途径rawformat,以ImageFormat(最理想的情况switch语句或大量的if语句)

谢谢Ben

c# system.drawing system.drawing.imaging

10
推荐指数
3
解决办法
3万
查看次数

使用StructureMap在ASP.NET MVC 3 RC2中执行操作筛选依赖项注入

我一直在玩ASP.NET MVC RC2中的DI支持.

我已经为NHibernate的每个请求实现了会话,并且需要注入ISession我的"工作单元"动作过滤器.

如果我直接引用StructureMap容器​​(ObjectFactory.GetInstance)或使用DependencyResolver来获取我的会话实例,一切正常:

    ISession Session {
        get { return DependencyResolver.Current.GetService<ISession>(); }
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用我的StructureMap过滤器提供程序(继承FilterAttributeFilterProvider),我在请求结束时提交NHibernate事务时遇到问题.

就像ISession在请求之间共享对象一样.我经常看到这一点,因为我的所有图像都是通过MVC控制器加载的,因此我在正常页面加载时创建了20个左右的NHibernate会话.

我在动作过滤器中添加了以下内容:

    ISession Session {
        get { return DependencyResolver.Current.GetService<ISession>(); }
    }

    public ISession SessionTest { get; set; }

    public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext) {

        bool sessionsMatch = (this.Session == this.SessionTest);
Run Code Online (Sandbox Code Playgroud)

使用StructureMap过滤器提供程序注入SessionTest.

我发现在一个有20个图像的页面上,"sessionsMatch"对于2-3个请求是假的.

我对会话管理的StructureMap配置如下:

        For<ISessionFactory>().Singleton().Use(new NHibernateSessionFactory().GetSessionFactory());
        For<ISession>().HttpContextScoped().Use(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());
Run Code Online (Sandbox Code Playgroud)

在global.asax中,我在每个请求结束时调用以下内容:

    public Global() {
        EndRequest += (sender, e) => {
            ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
        };
    }
Run Code Online (Sandbox Code Playgroud)

这个配置线程安全吗?以前我使用自定义将依赖项注入到同一个过滤器中IActionInvoker.当我开始遇到上述问题时,这一直工作到MVC 3 RC2,这就是为什么我认为我会尝试使用过滤器提供程序.

任何帮助,将不胜感激. …

structuremap nhibernate asp.net-mvc-3

10
推荐指数
1
解决办法
2749
查看次数

仅在Utc尚未转换时才将DateTime转换为Utc

我正在使用Jon Skeet 在c#fx 3.5中的特定时区创建日期时发布的DateTimeWithZone结构

这不适用于我的情况,因为它假定在构造函数中传递的DateTime是本地时间,因此使用指定的TimeZone将其转换为Utc.

在我的情况下,我们将主要传递已经在Utc中的DateTime对象(因为这是我们正在存储的),所以我们只需要在源DateTime.Kind不是Utc时执行转换.

因此我将构造函数更改为:

    public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, DateTimeKind kind = DateTimeKind.Utc) {
        dateTime = DateTime.SpecifyKind(dateTime, kind);
        utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone);
        this.timeZone = timeZone;
    }
Run Code Online (Sandbox Code Playgroud)

这里我们有一个可选的Kind参数,默认为Utc.

但是,运行此代码并传递Utc DateTime会生成以下异常:

转换无法完成,因为提供的DateTime没有正确设置Kind属性.例如,当Kind属性为DateTimeKind.Local时,源时区必须为TimeZoneInfo.Local.

根据文档(http://msdn.microsoft.com/en-us/library/bb495915.aspx):

如果dateTime参数的Kind属性等于DateTimeKind.Utc且sourceTimeZone参数等于TimeZoneInfo.Utc,则此方法返回dateTime而不执行任何转换.

由于输入时间和时区都具有Utc的Kind属性,因此我不希望得到此异常.

我误解了吗?

.net c# datetime

10
推荐指数
1
解决办法
2万
查看次数

StructureMap获取已注册的类型,而非实例

我有一个插件系统,允许用户选择他们想要创建的插件类型(基本上这为插件实例设置了配置).

他们从选择列表中选择插件类型.我正在使用StructureMap将IEnumerable注入我的MVC控制器,以便我可以访问要在选择列表中使用的FQ类型名称.

这工作正常但我不喜欢我必须创建所有已注册插件的实例只是为了在选择列表中显示它们的列表.

所以问题是,我可以访问在StructureMap 中注册的IPlugin类型吗?

c# structuremap

9
推荐指数
1
解决办法
2601
查看次数

TPL等待任务以特定的返回值完成

我想向X提出不同的Web服务请求,每个Web服务都返回true或者false.

这些任务应该并行执行,我想等待完成的第一个具有真正的价值.当我收到真正的价值时,我不想等待其他任务完成.

在下面的示例中,自首先完成后t1不应等待t3并返回true:

var t1 = Task.Run<bool>(() =>
{
    Thread.Sleep(5000);
    Console.WriteLine("Task 1 Excecuted");
    return true;
}, cts.Token);

var t2 = Task.Run<bool>(() =>
{
    Console.WriteLine("Task 2 Executed");
    return false;
}, cts.Token);

var t3 = Task.Run<bool>(() =>
{
    Thread.Sleep(2000);
    Console.WriteLine("Task 3 Executed");
    return true;
}, cts.Token);
Run Code Online (Sandbox Code Playgroud)

基本上我正在寻找Task.WhenAny一个谓词,当然不存在.

.net c# task-parallel-library async-await

9
推荐指数
2
解决办法
1851
查看次数

使用ImageMagick从图像生成调色板

我需要生成图像中前5种主色的调色板.我想复制Embedly的提取工具Color Thief的结果.

以下命令给出了稍微不同的结果:

convert testimage.jpg  -format %c -colorspace LAB -colors 5 histogram:info:- | sort -n -r
    157154: ( 19, 28, 35) #131C23 srgb(19,28,35)
     16164: ( 27, 51, 77) #1B334D srgb(27,51,77)
     15725: ( 79, 88, 84) #4F5854 srgb(79,88,84)
      8608: ( 44, 77,103) #2C4D67 srgb(44,77,103)
      5149: ( 84,126,150) #547E96 srgb(84,126,150)
Run Code Online (Sandbox Code Playgroud)

我有点不确定我是否应该量化为5种颜色,因为我发现这样做不能很好地使用简单的图形(例如Google徽标).使用更大的调色板然后只选择前n种颜色会更好吗?

这引出了我关于所使用的量化算法的下一个问题.看看Embedly Extract的结果,输出颜色不一定是最常见的,但看起来是彼此最不同的聚类.

例如,假设我有一个非常暗的图像(黑色/棕色),细节为鲜红色.我如何确保ImageMagick包含红色?(道歉,如果这听起来很愚蠢,色彩理论对我来说都是新的!).

下面是我用于测试的图像:

在此输入图像描述

colors imagemagick quantization

9
推荐指数
2
解决办法
5751
查看次数

在MVC 3中使用AdditionalMetadata的示例

在asp.net MVC 3中,有一个新属性允许我们将其他元数据传递给我们的视图,例如

    [Required]
    [AdditionalMetadata("Tooltip", "The title of the item")]
    public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)

问题是,我如何在我的视图中实际使用这些信息?我认为也许它会将数据呈现为html 5数据属性,但事实并非如此.

一个简单的例子将非常感激.

asp.net-mvc data-annotations asp.net-mvc-3

8
推荐指数
1
解决办法
6847
查看次数

System.Runtime.Caching.MemoryCache - 需要锁定

在使用System.Runtime.Caching.MemoryCache例如调用时是否还需要实现锁定Contains(key);?还是已经是线程安全的?

.net caching

8
推荐指数
2
解决办法
3511
查看次数

DDD.用户可配置设置在哪里?

我正在研究我的第一个"真正的"DDD应用程序.

目前,我的客户端无权访问我的域层,并通过发出命令请求更改域.

然后,我有一个单独的(扁平的)读取模型用于显示信息(如简单的CQRS).

我现在正在进行配置,或者特别是用户配置的设置.以博客应用程序为例,设置可能是博客标题或徽标.

我开发了一个通用配置构建器,它基于一个简单的键值对集合构建一个强类型配置对象(例如BlogSettings).我坚持认为这些配置对象是否属于我的域.我需要从客户端和服务器访问它们.

我正在考虑创建一个包含这些配置对象的"共享"库.这是正确的方法吗?

最后,保存这些配置设置的代码应该在哪里?一个简单的解决方案是将此代码放在我的Domain.Persistence项目中,但是,如果它们不是域的一部分,它们真的应该存在吗?

谢谢,

domain-driven-design cqrs

8
推荐指数
1
解决办法
1876
查看次数

为什么需要匿名函数来使用setTimeout保留"this"

我已经setTimeout多次使用函数作为参考,例如

setTimeout(someFunction, 3000);
Run Code Online (Sandbox Code Playgroud)

在某些情况下,为了保留值,this我必须事先将它分配给变量,但不明白为什么以下不起作用:

var logger = {
    log: function() { 
        var that = this;
        console.log(that.msg); 
        setTimeout(that.log, 3000); 
    },
    msg: "test"
};

logger.log();
Run Code Online (Sandbox Code Playgroud)

但是,使用匿名函数可以正常工作:

var logger = {
    log: function() { 
        var that = this;
        console.log(that.msg); 
        setTimeout(function() { that.log() }, 3000); 
    },
    msg: "test"
};
Run Code Online (Sandbox Code Playgroud)

javascript settimeout

8
推荐指数
1
解决办法
303
查看次数