我正在使用ASP.MVC 4和Autofac.
我在我的global.asax.cs文件中注册了以下内容:
ContainerBuilder builder = new ContainerBuilder();
builder.Register(c => c.Resolve<HttpContextBase>().Request)
.As<HttpRequestBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
.As<HttpResponseBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
.As<HttpServerUtilityBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
.As<HttpSessionStateBase>()
.InstancePerHttpRequest();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
Run Code Online (Sandbox Code Playgroud)
在我的家庭控制器中我有这个(仅用于测试目的):
private readonly HttpContextBase httpContext;
public HomeController(HttpContextBase httpContext)
{
this.httpContext = httpContext;
}
Run Code Online (Sandbox Code Playgroud)
我使用完全相同的代码与ASP.NET MVC 3项目,它工作正常.现在在这个项目中我遇到了错误.不知道为什么?我得到的错误是:
与类型"Autofac.Core.Activators.Reflection.DefaultConstructorFinder"发现施工人员无"MyProject.Web.Controllers.HomeController"可以与提供的服务和参数来调用:无法解析参数"System.Web.HttpContextBase的HttpContext"的构造函数'Void .ctor(System.Web.HttpContextBase)'.at autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context,IEnumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable1参数)at Autofac.Core.Resolving.InstanceLookup.Execute()at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope,IComponentRegistration registration,IEnumerable)1 parameters) at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable1个参数)在Autofac.Core.Registration.ExternalRegistrySource.<
我不太清楚为什么这不起作用?我需要在ASP.NET 4中以不同的方式做事吗?
我有一个单独的项目,我也想注入HttpContextBase,我得到同样的错误.
我正忙着使用ASP.NET MVC 3应用程序并使用Windows 7.目前它使用内置的Web服务器来运行Web应用程序.我希望它在IIS中运行.在将此设置为在IIS上运行时,是否需要了解任何建议?
一个工作的人说我的Web应用程序必须在wwwroot目录中,以便IIS正常工作.我对此的理解是,如果我创建了一个虚拟目录(Web应用程序可以在任何目录中)那么我应该没问题?
另外,我可以购买哪些体面的书籍可以帮助我更好地理解IIS吗?这不一定是ASP.NET MVC特有的.我知道在IIS中唯一能做的就是创建一个虚拟目录:)
如何在IIS中运行应用程序时调试应用程序?
任何建议和互联网文章将不胜感激:)
我有以下实现:
private INewsRepository newsRepository;
public NewsService(INewsRepository newsRepository)
{
this.newsRepository = newsRepository;
}
Run Code Online (Sandbox Code Playgroud)
此服务位于与我的Web项目不同的项目中.在哪里以及如何指定依赖注入?我还需要把它放在我的global.asax文件中吗?如果此服务也用于我的其他应用程序怎么办?
c# dependency-injection ioc-container inversion-of-control autofac
如何使用Moq创建纯存根?使用Rhino Mocks我这样做:
[TestFixture]
public class UrlHelperAssetExtensionsTests
{
private HttpContextBase httpContextBaseStub;
private RequestContext requestContext;
private UrlHelper urlHelper;
private string stylesheetPath = "/Assets/Stylesheets/{0}";
[SetUp]
public void SetUp()
{
httpContextBaseStub = MockRepository.GenerateStub<HttpContextBase>();
requestContext = new RequestContext(httpContextBaseStub, new RouteData());
urlHelper = new UrlHelper(requestContext);
}
[Test]
public void PbeStylesheet_should_return_correct_path_of_stylesheet()
{
// Arrange
string expected = stylesheetPath.FormatWith("stylesheet.css");
// Act
string actual = urlHelper.PbeStylesheet();
// Assert
Assert.AreEqual(expected, actual);
}
}
Run Code Online (Sandbox Code Playgroud)
如何MockRepository.GenerateStub<HttpContextBase>();使用Moq 创建存根?或者我应该留在Rhino Mocks?
我正在使用最新版本的jQuery datatables.是否有一个回调函数,我可以在数据加载并显示在数据表中后立即使用?
我有一个我正在试验的数据表IE8.我有两组我正在测试的数据(我一次只使用一组).我有一个JavaScript数组和一组从Ajax调用中获取的数据.我在用ASP.NET MVC 3.
从Ajax调用获取其数据的配置:
$('#banks-datatable').dataTable({
"bProcessing": true,
"sAjaxSource": '/Administration/Bank/List',
"aoColumns": [
{ "sTitle": "Engine" },
{ "sTitle": "Browser" },
{ "sTitle": "Platform" },
{ "sTitle": "Version" },
{ "sTitle": "Grade" }
],
"bAutoWidth": false,
"bFilter": false,
"bLengthChange": false,
"iDisplayLength": 10
});
alert('test');
Run Code Online (Sandbox Code Playgroud)
以这种方式加载我的数据表时,将创建数据表(没有数据),并显示处理框并显示警报弹出窗口.此时数据表已存在但没有数据已加载到数据表中.只有当弹出窗口消失时(当我单击弹出窗口上的"确定"按钮时),数据才会加载到数据表中.为什么是这样?
从JavaScript数组获取其数据的配置:
var aDataSet = [
['Trident', 'Internet Explorer 4.0', 'Win 95+', '4', 'X'],
['Trident', 'Internet Explorer 5.0', 'Win 95+', '5', 'C'],
['Trident', 'Internet Explorer 5.5', 'Win 95+', '5.5', 'A'], …Run Code Online (Sandbox Code Playgroud) 我正在构建一个具有ASP.NET MVC Web应用程序的多层应用程序.它包含表达层,业务层,数据层等常见内容.如何创建/使用体面的异常处理机制?我阅读了模式和实践,您需要将异常冒泡到各个层.
还记录.记录发生在哪里?在MVC Web应用程序中?
您将如何根据错误类型重定向到各种错误页面?
我会很感激有关这方面的一些反馈,以及一些文章,如果你们有一些.如果有任何样本应用程序使用一个体面的异常哈希和日志记录策略请告诉我:)
从视图模型到域模型的映射的最佳位置在哪里?通过映射我的意思是从我EditGrantApplicationViewModel到一个GrantApplication对象.
可以说我有以下操作方法(部分代码):
[HttpPost]
public ActionResult Create(EditGrantApplicationViewModel editGrantApplicationViewModel)
{
if (!ModelState.IsValid)
{
return View("Create", editGrantApplicationViewModel);
}
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
我是否需要传递editGrantApplicationViewModel给服务层方法并在方法中进行映射?
我在Global.asax.cs中注册了这样的组件:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// This is where my error happens, not sure why?
var workContext = container.Resolve<IWorkContext>();
Run Code Online (Sandbox Code Playgroud)
WebWorkContext 类:
public class WebWorkContext : IWorkContext
{
// Left out other code
}
Run Code Online (Sandbox Code Playgroud)
IWorkContext 接口:
public interface IWorkContext
{
// Left out other code
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
从请求实例的作用域中看不到具有匹配"httpRequest"的标记的作用域.这通常表示注册为每HTTP请求的组件正被SingleInstance()组件(或类似场景)重新请求.在Web集成下,始终从DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime请求依赖项,从不从容器本身请求.
我如何让它工作?我之所以这么想是因为工作上下文处理诸如获取当前客户等内容.
还有一些问题.一次注册是否明智/最佳做法?我需要在另一个阶段添加更多组件吗?
我正在使用Entity Framework 4 Code First CTP5和ASP.NET MVC 3.我想知道如何使用存储过程?
我的respository类中有以下代码:
MyDatabaseContext db = new MyDatabaseContext();
public void Insert(News news)
{
db.Newses.Add(news);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
然后我的插入存储过程将如下所示:
ALTER PROCEDURE [dbo].[News_Insert]
(
@Title VARCHAR(100),
@Body VARCHAR(MAX),
@NewsStatusId INT
)
AS
BEGIN
INSERT INTO
News
(
Title,
Body,
NewsStatusId
)
VALUES
(
@Title,
@Body,
@NewsStatusId
);
SELECT SCOPE_IDENTITY();
END
Run Code Online (Sandbox Code Playgroud)
任何文章/建议将不胜感激.
更新1:
有了设计师,我可以返回新对象或新闻ID,我该怎么做?
更新2
这就是我做的:
public void Insert(News news)
{
int newsId = context.Database.SqlQuery<int>("News_Insert @Title, @Body, @Active",
new SqlParameter("Title", news.Title),
new SqlParameter("Body", news.Body),
new SqlParameter("Active", news.Active)
).FirstOrDefault(); …Run Code Online (Sandbox Code Playgroud) 所以我不知道如何time(hh:mm:ss)在sql server中减去两个.
这是我的发言:
where
( CONVERT(TIME(7), [EndWork], 102)) - ( CONVERT(TIME(7), [StartWork], 102)) <
CONVERT(TIME(7), ' 8:30:00', 102)
Run Code Online (Sandbox Code Playgroud) c# ×6
asp.net ×3
asp.net-mvc ×3
autofac ×3
sql-server ×2
.net ×1
automapper ×1
iis ×1
iis-7 ×1
javascript ×1
jquery ×1
moq ×1
nunit ×1
rhino-mocks ×1
sql ×1