我对使用Autofac的实现中的Dispose()方法有点困惑IDisposable
说我的对象有一定的深度:
Controller取决于IManager;Manager取决于IRepository;Repository取决于ISession;ISession是IDisposable.这导致以下对象图:
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
我有一个未知数量的桶(集合),每个桶具有未知数量的实体
我需要生成所有实体的笛卡尔积,这样我最终会得到一个具有ARRAYS实体的COLLECTION,并且在每个数组中,每个桶都有1个代表性.
因此,如果我有5个桶(B1..B5),并且桶B1,B2各有1个项目,而桶B3,B4和B5各有4个,8个和10个项目,我将拥有320个阵列的集合,每个数组将有5个项目.
这里唯一的问题是,在开发时,桶的大小和桶的数量都是未知的.
性能在这里并不是非常重要,因为大多数时候,我的桶只有1个实体,而且很少有时候我的桶会包含20-30个项目...而且我通常会有5个30桶
我想在某种程度上使用linq,但是当我试图想象这是如何工作的时候,我的大脑正在变得油腻
项目是基于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的内存中,但它似乎没有帮助
致力于将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?
谢谢!
我认为我正在寻找的东西非常简单,但我找不到任何例子.我想使用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)
这可能吗?如果是这样,我该如何正确映射我的界面?谢谢!
我认为,在Visual Studio中我认为是一种非常常见的解决方案模式:
我正在使用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,一切都很好.但是,如果网站提出请求,则会获得联合国授权.
有什么建议?
寻找有关如何解决此问题的建议,并了解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
我有以下挑战:
我有一个包含许多实例的Azure云工作者角色.每一分钟,每个实例都会旋转大约20-30个线程.在每个线程中,它需要读取一些有关如何处理来自3个对象的线程的元数据.对象/数据驻留在远程RavenDb中,即使RavenDb在通过HTTP检索对象方面非常快,但是仍然有30多名工作人员承受相当大的负担,每分钟每个线程击中它3次(约45个请求/秒) ).大多数时候(如99.999%)RavenDb中的数据不会改变.
我决定实现本地存储缓存.首先,我读了一条小记录,表明元数据是否已经改变(它很少变化),然后我从本地文件存储而不是RavenDb读取,如果本地存储有缓存的对象.我正在使用File.ReadAllText()
这种方法似乎使机器停滞不前,处理速度大大减慢.我猜测"小"工作者角色的磁盘不够快.
无论如何,我可以让操作系统帮助我并缓存这些文件吗?也许有一种替代缓存这些数据?
我正在查看每个Cloud Role实例上存储的大约1000个不同大小的文件,大小从100k到10mb不等
我有几百个调用各种外部API,我希望将其包装在一个能够重试和处理超时的通用异步函数中.
基本上,我认为我需要实现类似这个函数调用的东西:
await Retry(()=>someFunctionAsync(doWorkParams, new CancellationToken()), retryCount, timeout);
Run Code Online (Sandbox Code Playgroud)
如何定义此类重试功能?另外,我如何从同步代码中调用此功能,因为我的调用大量存在于同步方法中?
我甚至不确定是否有一个实用程序可以允许这个,但它似乎是一个常见的需求?
是否有一个程序/库/组件将生成模拟的.NET对象(存储库),这些对象将产生一些模拟数据作为某些数据库调用.
请允许我详细说明:如果我正在测试存储库(不是单元测试,只是在控制台窗口中测试),当我将选择条件传递给我的存储库时,它会返回一个对象列表.我希望/喜欢/能够捕获对象列表并将其转换为静态设置C#代码,这些代码将用作单元测试的设置.我的物体很安静,需要很长时间才能正确设置.
这可能吗?我的团队正在使用Moq和Ninject
c# ×4
.net ×2
asp.net-mvc ×2
architecture ×1
asp.net ×1
async-await ×1
asynchronous ×1
autofac ×1
caching ×1
cors ×1
html5 ×1
idisposable ×1
json.net ×1
linq ×1
mocking ×1
moq ×1
mstest ×1
ninject ×1
owin ×1
ravendb ×1
repository ×1
silverlight ×1
unit-testing ×1
webforms ×1