小编Igo*_*rek的帖子

依赖注入和IDisposable

我对使用Autofac的实现中的Dispose()方法有点困惑IDisposable

说我的对象有一定的深度:

  • Controller取决于IManager;
  • Manager取决于IRepository;
  • Repository取决于ISession;
  • ISessionIDisposable.

这导致以下对象图:

new Controller(
    new Manager(
        new Repository(
            new Session())));
Run Code Online (Sandbox Code Playgroud)

我是否还需要使我的Manager和Repository实现IDisposable,并在Controller中调用Manager.Dispose(),在Manager中调用Repository.Dispose()等,或者Autofac会自动知道我的调用堆栈中哪些对象需要正确处理?Controller对象已经是IDisposable,因为它派生自基本ASP.NET Web API控制器

.net dependency-injection idisposable inversion-of-control autofac

12
推荐指数
1
解决办法
2734
查看次数

在Linq(C#)中将多个不同大小的集合动态交叉连接在一起

我有一个未知数量的桶(集合),每个桶具有未知数量的实体

我需要生成所有实体的笛卡尔积,这样我最终会得到一个具有ARRAYS实体的COLLECTION,并且在每个数组中,每个桶都有1个代表性.

因此,如果我有5个桶(B1..B5),并且桶B1,B2各有1个项目,而桶B3,B4和B5各有4个,8个和10个项目,我将拥有320个阵列的集合,每个数组将有5个项目.

这里唯一的问题是,在开发时,桶的大小和桶的数量都是未知的.

性能在这里并不是非常重要,因为大多数时候,我的桶只有1个实体,而且很少有时候我的桶会包含20-30个项目...而且我通常会有5个30桶

我想在某种程度上使用linq,但是当我试图想象这是如何工作的时候,我的大脑正在变得油腻

c# linq cartesian-product

9
推荐指数
3
解决办法
1790
查看次数

在内存中缓存json.net序列化结果的最佳方法是什么?

项目是基于MVC WebAPI的.

我们将客户端的权限上下文作为请求的声明头中的序列化JSON对象传递给我们的API服务器.这不是一个大对象:6个属性和一个基于枚举的键值对的集合(这里最多6个项目)

绝大多数API请求都是从同一组客户端每分钟(更频繁地)发生的.可能是700-900个客户(并且正在增长),每个客户每分钟都会反复发送相同的声明.

对于每个请求,代码的各个组件可能会反序列化此对象5-6次.这种反序列化会导致服务器上的CPU流量大量增加.

将这些反序列化缓存在内存中的最佳方法是什么?具有键的静态Dictionary对象是序列化JSON字符串,运行良好还是通过它搜索太慢,因为这些字符串的大小会相当大?

编辑:每个控制器的每个操作都通过此属性进行过滤,以确保调用具有适当的权限

    public class AccountResolveAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext context)
    {
        var controller = (ControllerBase) context.ControllerContext.Controller;
        var identity = (ClaimsIdentity) controller.User.Identity;

        var users = identity.Claims
            .Where(c => c.Type == ClaimTypes.UserData.ToString())
            .Select(c => JsonConvert.DeserializeObject<UserInformation>(c.Value))
            .ToList();

        var accountId = controller.ReadAccountIdFromHeader();

        if (users.All(u => u.AccountId != accountId))
        {
            throw new ApplicationException(string.Format("You have no rights for viewing of information on an account Id={0}", accountId));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在基本控制器中也有询问索赔的调用,但AccountResolve可能会将第一个反序列化的结果缓存到控制器中,以便这些调用不会再次尝试反序列化.但是,声明一遍又一遍,我只是想找到一种优化方法,不要反复反序列化相同的字符串.我已经尝试将序列化字符串作为键和结果对象缓存到全局静态ConcurrentDictionary的内存中,但它似乎没有帮助

c# json.net asp.net-web-api

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

.NET中的商业网络应用程序 - 选择哪种技术?

致力于将Winforms应用程序移植到Web上.这是一个业务应用程序,但无法控制最终用户的浏览器.大多数情况下,每个人都会在台式机上使用IE,Chrome,FireFox和在iPad上使用Safari.

应用程序正在大量使用ListViews,TreeViews,网格,图表,并且具有整体"停靠式"界面(左侧是导航栏,右侧是详细页面,并且是标签式的 - 类似于Visual Studio UI).不需要任何SEO/HTML友好框架,因为该应用程序隐藏在搜索引擎中.

寻找有关网络技术的建议.需要本机或第三方支持ListViews,TreeViews,网格,图表和停靠UI.快速上市和简单非常重要./讨厌/搞砸Javascript或非服务器技术.

Silverlight的?MVC与HTML5?纯MVC?带HTML5的网络表单?计划Webforms?第三方控制?(获得Telerik的许可,并且除非有免费/开源软件包,否则我们更愿意坚持使用它们)

我想一年前Silverlight应该是一个简单的答案,但现在我不再确定它由于缺乏Silverlight支持的Android设备的最终崛起...而且似乎微软正在将重点从Silverlight转向HTML5

那么,什么是商业应用程序而不是Silverlight?

谢谢!

asp.net silverlight asp.net-mvc html5 webforms

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

通过ToMethod将接口绑定到带参数的方法

我认为我正在寻找的东西非常简单,但我找不到任何例子.我想使用Ninject创建一个对象,方法是让Ninject调用一个带有指定参数的工厂方法,而不是在实际请求实例化对象期间注入:

在这里请求一个对象:

StandardKernel.Get<ISomeInteface>(new Ninject.Parameters.Parameter("dataContext", dataContext, true));
Run Code Online (Sandbox Code Playgroud)

我想将ISomeInterface映射到一个方法,该方法期望在运行时将值传递给它.

在此处映射接口:

Kernel.Bind<ISomeInterface>().ToMethod(SomeObject.Create(--> `what do I put here?`));
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,我该如何正确映射我的界面?谢谢!

ninject

7
推荐指数
1
解决办法
4787
查看次数

无法从不同项目中的站点授权WEB API请求

我认为,在Visual Studio中我认为是一种非常常见的解决方案模式:

  1. ASP.NET MVC项目,具有多个角度支持的ASP.NET视图
  2. 将API数据提供给angularjs的WEB API v2项目

我正在使用OWIN与auth存储在应用程序cookie方法MVC和WEB API项目有这个配置:

    app.UseCookieAuthentication(new CookieAuthenticationOptions             {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        LogoutPath = new PathString("/Account/Logout"),
        CookieDomain = CloudConfigurationManager.GetSetting("AuthCookieDomain"),
        CookieSecure = CookieSecureOption.Always,
        CookiePath = "/",
        CookieHttpOnly = false,
        ExpireTimeSpan = TimeSpan.FromDays(365),
        SlidingExpiration = true,           });

    // Use a cookie to temporarily store information about a user logging in with a third party login provider          app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
Run Code Online (Sandbox Code Playgroud)

Web API要求对每个调用进行身份验证:

    config.Filters.Add(new AuthorizeAttribute());
Run Code Online (Sandbox Code Playgroud)

Cors已启用,OWIN的Cors安装在Web API项目中.这两个项目都在https:// localhost下运行,但目前使用不同的端口如果我通过浏览器登录MVC站点并在web api方法上进行GET,一切都很好.但是,如果网站提出请求,则会获得联合国授权.

有什么建议?

asp.net-mvc cors owin

7
推荐指数
0
解决办法
372
查看次数

企业规模的DDD?

寻找有关如何解决此问题的建议,并了解Domain Driven Design是否真的是最好的模式.

我的客户正在重新设计其近乎过时的工具和服务堆栈.客户是一个快速扩张的电子商务.它的核心产品是其庞大的电子商务网站.在该网站周围,客户端具有向合作伙伴公开的各种数据馈送.大量内部应用程序,以帮助营销,销售,报告等.大量的用户支持和合作伙伴支持应用程序.大量的各种数据同步,ETL工作等...你得到了图片.

数据存储和数据提供商也很多.NOSQL基于云的超级可扩展存储提供了公共网站上的大部分内容.具有许多数据库的SQL服务器向内部应用程序提供数据.还有一些特殊的搜索服务器可以提供可加速搜索功能,以及应用程序从各种第三方供应商处消费的其他供稿.如果采用DDD,则计划是从数据存储特定的存储库基类继承各种存储库对象组

客户已经进行了一项练习,他们在"通用"级别上绘制了大部分业务实体:实体名称和关系.除了"通用"级别之外,跨应用程序的各种具体对象的重用量也相当大,并且根据应用程序的不同,实体的实现也会有所不同.

例如:电子商务网站上的订单实体可能看起来像X,而对于处理Y等支持调用的应用程序,以及对Z进行欺诈分析的人员.

我正在寻找关于如何调整DDD或其他架构模式来处理这个巨大混乱的建议:有一个可靠的企业策略,有助于重用,并允许在必要时分离逻辑.除了通常(可扩展,灵活,适应性强,可单元测试,简单等)标准之外.

由于数据存储的不同,DTO的结构看起来与数据存储到数据存储有很大不同.由于各种业务需求,各种应用程序需要不同版本的某些实体,并且由于公司正在快速扩张,未来非常不稳定,灵活性至关重要.

我想我最大的问题是找到一种方法将业务模型分离到不同的域,并且在存在大量共享或重用时仍然保持在一起,同时能够采用高级别的更改.

谢谢你的所有建议

PS该商店是微软商店.VS2010/.NET/SQL/Azure的

.net architecture domain-driven-design entity-framework repository

6
推荐指数
1
解决办法
513
查看次数

在多处理环境中读取文件的最快方法?C#

我有以下挑战:

我有一个包含许多实例的Azure云工作者角色.每一分钟,每个实例都会旋转大约20-30个线程.在每个线程中,它需要读取一些有关如何处理来自3个对象的线程的元数据.对象/数据驻留在远程RavenDb中,即使RavenDb在通过HTTP检索对象方面非常快,但是仍然有30多名工作人员承受相当大的负担,每分钟每个线程击中它3次(约45个请求/秒) ).大多数时候(如99.999%)RavenDb中的数据不会改变.

我决定实现本地存储缓存.首先,我读了一条小记录,表明元数据是否已经改变(它很少变化),然后我从本地文件存储而不是RavenDb读取,如果本地存储有缓存的对象.我正在使用File.ReadAllText()

这种方法似乎使机器停滞不前,处理速度大大减慢.我猜测"小"工作者角色的磁盘不够快.

无论如何,我可以让操作系统帮助我并缓存这些文件吗?也许有一种替代缓存这些数据?

我正在查看每个Cloud Role实例上存储的大约1000个不同大小的文件,大小从100k到10mb不等

c# multithreading caching ravendb

6
推荐指数
1
解决办法
283
查看次数

C#中具有超时功能的通用异步重试

我有几百个调用各种外部API,我希望将其包装在一个能够重试和处理超时的通用异步函数中.

基本上,我认为我需要实现类似这个函数调用的东西:

await Retry(()=>someFunctionAsync(doWorkParams, new CancellationToken()), retryCount, timeout);
Run Code Online (Sandbox Code Playgroud)

如何定义此类重试功能?另外,我如何从同步代码中调用此功能,因为我的调用大量存在于同步方法中?

c# asynchronous async-await

6
推荐指数
2
解决办法
2540
查看次数

使用实时数据快速生成模拟的存储库对象?起订量

我甚至不确定是否有一个实用程序可以允许这个,但它似乎是一个常见的需求?

是否有一个程序/库/组件将生成模拟的.NET对象(存储库),这些对象将产生一些模拟数据作为某些数据库调用.

请允许我详细说明:如果我正在测试存储库(不是单元测试,只是在控制台窗口中测试),当我将选择条件传递给我的存储库时,它会返回一个对象列表.我希望/喜欢/能够捕获对象列表并将其转换为静态设置C#代码,这些代码将用作单元测试的设置.我的物体很安静,需要很长时间才能正确设置.

这可能吗?我的团队正在使用Moq和Ninject

unit-testing mstest moq mocking

5
推荐指数
1
解决办法
433
查看次数