使用此示例和此实现提供的组合,我尝试创建一个解决方案,将UnitOfWork类与各个存储库分离,因为它们违反了开放 - 封闭原则,因为每次添加新存储库时都必须修改UnitOfWork类.我使用Unity作为IoC容器来连接依赖项.
我的问题是,在自动布线构成UnitOfWork,IDbContext和储存库(IEmployeeRepository和ICustomerRepository使用Unity)时,存储库将与的单独实例注入UnitOfWork,其中,当然,失败的目的.我需要在存储库之间共享上下文,似乎我错过了这个难题的一个部分 - 目前(参见服务层),UnitOfWork实例化将与UnitOfWork每个存储库的不同.
如何使用Unity和依赖注入将注入IUnitOfWork到服务层并将此实例化的共享 UnitOfWork类传递到相应的存储库?
这是我提出的(伪造的)解决方案:
库
public interface IRepository<TEntity> where TEntity : class
{
TEntity Create();
// omitted for brevity
}
public class Repository<TEntity> : IRepository<TEntity>
where TEntity : class
{
private readonly DbContext _context;
public Repository(IUnitOfWork uow)
{
_context = uow.Context;
}
public virtual TEntity Create(TEntity entity)
{
return …Run Code Online (Sandbox Code Playgroud) entity-framework inversion-of-control unity-container unit-of-work repository-pattern
使用Chrome开发者工具调试JavaScript代码时,调试器会暂停未设置断点的代码.我没有Pause on exceptions启用该功能,并且肯定没有设置断点(参见附图).
我之前问了一个类似的问题是有帮助的但是并没有完全解决这个问题(以前我已经Pause on exceptions启用了).在下面的示例中,我换出了kendo.all.min.js未缩减版本的缩小版本,这允许我查看脚本执行暂停的位置,但我不知道为什么它被暂停.这种情况也发生了很多jquery.min.js.

我正在尝试为Entity Framework实现存储库解决方案,但是我在使用Unity注册包含泛型的类型时遇到了问题.
鉴于:
// IRepository interface
public interface IRepository<TEntity>
{
// omitted for brevity
}
// Repository implementation
public class Repository<TEntity, TContext> : IRepository<TEntity>, IDisposable
where TEntity : class
where TContext : DbContext
{
// omitted for brevity
}
// service layer constructor
public MyServiceConstructor(IRepository<Account> repository)
{
_repository = repository;
}
Run Code Online (Sandbox Code Playgroud)
我需要将IRepository的类型映射注册到Repository.但是我在使用这种映射的Unity语法时遇到了麻烦.
我试过以下没有运气:
container.RegisterType<IRepository<>, typeof(Repository<,>)>();
container.RegisterType<typeof(IRepository<>), Repository<,>>();
Run Code Online (Sandbox Code Playgroud)
编辑
基于@Steven响应我现在有以下实现:
// UnityRepository implementation
public class UnityRepository<TEntity> : Repository<TEntity, MyDbContextEntities>
where TEntity : class
{
public UnityRepository() : …Run Code Online (Sandbox Code Playgroud) entity-framework unity-container separation-of-concerns repository-pattern
基于这篇文章,我使用Visual Studio 2013 Intranet Site模板创建了一个基本的ASP.NET MVC站点,该模板具有默认设置并且不做任何更改.
在调试模式下运行站点而不是登录并显示我的时domain\username,我会在Authentication Required对话框中提示输入用户名/密码.
我的印象是,由于我已经对域进行了身份验证,因此我应该使用我的AD帐户直接登录到应用程序,而无需输入任何内容.当我尝试明确输入我的AD名称或本地用户帐户时,不接受任何内容.
编辑
如果我使用Firefox键入我的用户名/密码,我会通过身份验证,但不会使用Chrome和IE.
有任何想法吗?
如果我创建MVC操作或操作链接,例如@Url.Action("Index", "Home")"我被重定向到http://www.example.com,但我想要强制它重定向到http://www.example.com/Home/Index或http://www.example.com/Home.有没有办法明确呈现完整路径?我的谷歌搜索空洞.
我目前正在运行Google Chrome版本31.0.1622.7,并且大约2天前我的开发工具停止记录我的任何输出(例如console.log("Blah.."),或者向控制台显示任何错误.如果发生错误,我可以看到窗口右下角的红色错误图标,但是如果我点击图标,它不会在控制台窗口中显示错误详细信息或突出显示源中的错误.
我尝试重新安装Chrome,但问题仍然存在.是否有其他人遇到此问题,和/或有解决方案?
我已经设置了使用下面的代码实现的自定义角色提供程序,除了它似乎从未被使用过,并且正在使用默认提供程序.当使用[Authorize(Roles = "Administrator")]属性装饰HomeController时,CustomRoleProvider正在调用构造函数(我只包含构造函数以查看是否会命中断点)但是没有调用任何方法.然后我留下了一个HTTP Error 401.0 - Unauthorized页面.
除了向web.config添加必要的位之外,我还没有做任何其他事情来使Windows身份验证工作.我认为它正在工作,因为如果我不包括<allow users="*"></allow>(显然没有包含Authorize属性)我得到一个401.2.: Unauthorized: Logon failed due to server configuration错误,所以我假设我正在被认证.
我已根据此SO帖子清除了我的浏览器cookie,但这没有任何效果.
CustomerRoleProvider
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider()
{
}
public override bool IsUserInRole(string username, string roleName)
{
bool isUserInRole = false;
// omitted for brevity
return isUserInRole;
}
public override string[] GetRolesForUser(string username)
{
string[] roles = null;
// omitted for brevity
return roles;
}
// omitted …Run Code Online (Sandbox Code Playgroud) 假设我有一个应用程序分为几个层:
将Windows Azure和Entity Framework Nuget软件包添加到AzureCache和EntityFrameworkRepository图层时,app.config文件会添加到每个相应的图层等.我很惊讶地看到,当我排除这些app.config文件时,应用程序仍然运行.我想app.config如果在MVC项目中需要/重复设置,我问的是服务的目的是什么?是app.config即使在运行时使用?