我正在构建我的域模型并继续重构它.像我一样,我发现我喜欢接口,因为它允许我根据接口为具体类型创建可重用的方法/控制器/视图.但是,我发现每次向其中一个域实体添加新属性时都会创建一个接口.
例如,我有一个MemberStatus对象,它继承自一个抽象的Entity对象,该对象又实现了IIdentifiableEntity接口,这意味着它具有Id属性.MemberStatus还实现了INamedEntity接口,这意味着它具有Name属性,IOrderedEntity接口意味着它具有DisplayOrder属性,IHasMembers接口意味着它具有集合成员对象.这是代码:
public class MemberStatus : Entity, INamedEntity, IOrderedEntity, IHasMembers
{
public string Name { get; set; }
public float DisplayOrder { get; set; }
public ICollection<Member> Members { get; set; }
}
public abstract class Entity : IIdentifiableEntity
{
public int Id { get; set; }
}
public interface IIdentifiableEntity
{
int Id { get; set; }
}
public interface INamedEntity
{
string Name { get; set; …Run Code Online (Sandbox Code Playgroud) 现在,在开发中,我在Global.asax.cs文件中有以下代码,它使用我的SeedSampleData方法调用Entity Framework(v4.1)SetInitializer.一切都很完美.
但是,我想通过web.config设置存储SetInitializer"strategy"参数,以便我可以创建一个deployement脚本,new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>()在生产部署期间自动将其设置为而不是我的种子方法.
想要将其移动到web.config的原因是当我将新部署推广到生产服务器时,我想确保我不会意外地将我的种子初始化程序留在代码中.
protected void Application_Start()
{
//TODO: Figure out how to move the following lines to web.config and have a deployment script modify it when going to production.
//This line is for production
//System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>());
//This line is for development
System.Data.Entity.Database.SetInitializer(new Domain.Concrete.SeedSampleData());
//... Remainder of Application_Start calls here...
}
Run Code Online (Sandbox Code Playgroud) 是否可以将表名作为参数传递给Dapper Query命令?我不是在寻找SQL表定义的函数或SQL表变量.我想在C#中定义表名并将其传递给Dapper.这是我的代码,执行时返回错误Must declare the table variable "@TableName"
var foo = conn.Query("SELECT * FROM @TableName WHERE Id = @Id", new { TableName = "MyTable", Id = 123 });
Run Code Online (Sandbox Code Playgroud) 我正在尝试正确使用Ninject将log4net日志记录注入我的MVC3应用程序.我正在使用Ninject.MVC3包,所以我有NinjectMVC3类,它自动扩展App_Start方法并包含绑定所有依赖项的RegisterServices方法.我也有Ninject.Extensions.Logging.Log4Net包,但我不知道如何使用它.我已经知道如何在我的web.config中配置log4net,但不知道如何在DI中使用此扩展.
我已经阅读了以下所有文章/帖子,但它们似乎都没有定义如何正确设置DI日志的项目.
在http://dotnetdarren.wordpress.com/2010/07/29/logging-in-mvc-part-4-log4net/,Darren提供了一篇很棒的文章,但似乎没有处理DI(至少我没有看得出来.
在使用Ninject填充Log4Net依赖关系时,Remo Gloor在此声明扩展应提供实现所需的全部内容,但它没有显示如何实例化它的代码.
https://github.com/ninject/ninject.extensions.logging/wiki/Using上的ninject.extensions.logging文档充其量是非常有限的.我已多次重读它,但仍然没有看到如何在NinjectMVC3类中使用绑定注入,或者例如如何从我的控制器类调用记录器的具体示例.
在最有希望的文章中,Moosaka在Ninject.Extensions.Logging.Log4net意外行为中提供了一些很棒的代码,但是当我尝试它时,我在LoggerFactory中得到一个编译错误,ILogger logger = new Logger(type);声明"无法在此处访问受保护的构造函数'Logger'".此外,他声称"把整个烂摊子扔进一个单独的类库".这是否意味着整个单独的项目?
我只是迷失在所有不同的选项和日期的帖子中,并希望在我的MVC3项目中如何使用Ninject和Log4Net的Dependancy Injection进行任何输入.此外,如果它很重要,我的所有Ninject代码都在我的域项目中,但是日志需要从域和Web项目完成(并在我的单元测试中进行模拟).任何帮助表示赞赏.
我觉得这里像个白痴.我在Azure中设置了一个简单的Windows虚拟机,需要通过VPN访问12个远程用户(他们都在家工作)才能访问共享驱动器.我认为这将是非常容易的,但我花了几天时间试图解决这个问题.
我有服务器设置,我现在已经意识到(经过几天的搜索)使用RRAS的传统PPTP或L2TP VPN无法正常工作,因为Azure框架会阻止这些协议.我也从帖子中看到过这样一个说使用Azure Connect的帖子,它应该可以满足我们的需求.但是,该文章中对Herve Roggero博客甚至微软自己的Azure支持网站的引用都谈到了我无法使用的功能,屏幕截图看起来与我在Azure控制台上看到的不同.实际上,Microsoft站点帮助文档的使用时间为2到2.5年.认真MS ...更新你的文档!
我的控制台看起来像这个图像(来自Google搜索的示例图像......不是我的真实界面)
但是,文章引用了看起来像这个图像的控制台
我没有使用正确的Azure版本吗?他们是否更新了界面而没有更新文档?底线,如何(使用我拥有的Azure界面)可以使用Azure Connect?我尝试创建虚拟网络,但没有任何内容可以选择使用Windows Azure Connect安装本地端点.我是白痴还是我在这里错过了什么?
我的解决方案中有两个项目......域项目和MVC3 Web项目(例如MyApp.Domain和MyApp.Web).以前,当使用Ninject.Extensions.Conventions ver.2,我能够在NinjectMVC3.cs文件中使用以下语句,并且在我的解决方案(web和域)中所需的依赖项被正确注入(例如,IFoo自动绑定到Foo).
kernel.Scan(x =>
{
x.FromAssembliesMatching("*");
x.BindWith<DefaultBindingGenerator>();
});
Run Code Online (Sandbox Code Playgroud)
我刚刚升级到Ninject 3.0.0(预发布)和Ninject.Extensions.Conventions 3.0.0(另一个预发行版),但基于约定的绑定的语法已经改变.我已经发现我可以在新版本中使用以下语句,但它只会自动绑定MyApp.Web中基于约定的接口而不是MyApp.Domain.以前的版本绑定了整个应用程序的接口.
kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses()
.BindToAllInterfaces());
Run Code Online (Sandbox Code Playgroud)
我是如何使用新的Ninject版本配置基于约定的绑定的?我假设它与指定程序集有关,但我已经尝试过使用,FromAssembliesMatching("*")然后它就失败了.
- 编辑以在RegisterServices方法中显示我现有的代码: -
private static void RegisterServices(IKernel kernel)
{
// This code used to work with v.2 of Ninject.Extensions.Conventions
// kernel.Scan(x =>
// {
// x.FromAssembliesMatching("*");
// x.BindWith<DefaultBindingGenerator>();
// });
// This is the new v3 code that automatically injects dependencies but only for interfaces in MyApp.Web, not MyApp.Domain
kernel.Bind(x => x.FromThisAssembly().SelectAllClasses().BindToAllInterfaces());
// I tried this code, but …Run Code Online (Sandbox Code Playgroud) 概要:我需要使用两个通用的C#对象,如果它们是数字,则使用小于或大于比较来比较它们.
问题:我无法弄清楚如何让我的类实现IComparable,如本文所述:必须实现一个小于和大于操作的泛型.如果这不是正确的路径,那么我也需要知道.
背景:我已经实现了在更复杂的自定义验证器中找到的RequiredIf ValidationAttribute,但除了等于比较之外还需要>和<选项.
代码(取自更复杂的自定义验证器,页面下三分之一):
private bool IsRequired(object actualPropertyValue)
{
switch (Comparison)
{
case Comparison.IsLessThan:
case Comparison.IsLessThanOrEqualTo:
case Comparison.IsGreaterThan:
case Comparison.IsGreaterThanOrEqualTo:
if (!Value.IsNumber())
{
throw new Exception("The selected comparison option is only applicable to numeric values");
}
break;
}
switch (Comparison)
{
case Comparison.IsNotEqualTo:
return actualPropertyValue == null || !actualPropertyValue.Equals(Value);
case Comparison.IsEqualTo:
return actualPropertyValue != null && actualPropertyValue.Equals(Value);
case Comparison.IsGreaterThan:
// THIS LINE FAILS BECAUSE actualPropertyValue DOESN'T IMPLEMENT IComparable
return …Run Code Online (Sandbox Code Playgroud) 我有,我认为是一个简单的功能,我试图添加到我的Orchard(1.6)网站,但我找不到任何教程或说明如何做到这一点.我有一个名为"Office"的自定义类型,每个办公室都有一个名为"State"的自定义字段,表示办公室所处的状态.我实际上将我的办公室设计为代码中的自定义部分,具有特定属性,例如State on it,但是我"想想"就像我通过Admin界面将State添加为Office内容部分的字段一样.
现在,我可以创建一个基本投影,向所有办公室显示一个简单的"Content with type Office"过滤器,以显示所有办公室.但是,我现在要做的是在页面顶部有一个下拉列表,其中显示" 按以下方式过滤:[-SELECT STATE-] ",其中包含所有50个州的列表.当用户选择状态时,页面应刷新并仅显示该状态的办公室.
这就是我被困住的地方.我应该通过代码执行此操作,还是可以通过管理UI执行此操作?如果通过代码,我应该在Orchard.Search模块之后对其进行建模(我试图这样做,但我完全迷失了).如果我可以通过UI完成,我是否使用投影?如果是这样,我是否必须创建50个单独的投影(每个状态一个)?创建和维护这似乎非常耗时.
任何帮助是极大的赞赏!
仅供参考,http://ktowneric.com/listings/search(使用Orchard)的网站与我正在寻找的非常相似,开发人员表示他使用了预测,但我似乎无法弄清楚他是如何做到的它.
在我的MVC3项目中,我安装了Maartenba的MvcSiteMapProvider v.3.2.1,并且我创建了一个非常简单的静态两级菜单.下面是概念图结构.
- Home
- Member Center
- Member Listing [SELECTED]
- Event Calendar
- Documents
- Administration
Run Code Online (Sandbox Code Playgroud)
现在,会员列表下有很多子页面(例如详细信息,编辑等),但我不希望这些子页面显示为第3级菜单项(主要是因为它们与特定的成员ID绑定).但是,我确实希望所有这些第三级页面都与"成员列表"菜单节点"绑定",以便在这些页面上显示为已选中.
我的Mvc.SiteMap文件中有以下代码:
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Member Center" area="Members" controller="Home" action="Index" roles="Approved Member" >
<mvcSiteMapNode title="Member Listing" area="Members" controller="Member" action="List" />
<mvcSiteMapNode title="Event Calendar" area="Members" controller="Event" action="List" />
<mvcSiteMapNode title="Documents" area="Members" controller="Document" action="List" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index" roles="Site Administrator" >
</mvcSiteMapNode>
</mvcSiteMapNode>
Run Code Online (Sandbox Code Playgroud)
要呈现菜单,我在_Layout.cshtml文件中使用以下代码:
@Html.MvcSiteMap().Menu(1, true, true, 1, true, true)
Run Code Online (Sandbox Code Playgroud)
最后,我修改了SiteMapNodeModel.cshtml文件,以便将"selectedMenuItem"类添加到与用户正在查看的页面相关的节点.这是呈现菜单节点的snippit.
@model SiteMapNodeModel …Run Code Online (Sandbox Code Playgroud) 使用SQL Server 2012,是否可以省略声明表值参数(TVP)只是为了将其传递给存储过程?下面是一个存储过程(SP)的一个非常简单的例子,它采用TVP和一个工作示例来执行该SP,我必须声明TVP,填充它然后将其传递给SP.我希望能够简单地将人口标准直接传递给EXEC电话.这可能吗?
场景设置:
-- Create a sample Users table
CREATE TABLE Users (UserID int, UserName varchar(20))
INSERT INTO Users VALUES (1, 'Bob'), (2, 'Mary'), (3, 'John'), (4, 'Mark')
-- Create a TVP Type
CREATE TYPE UserIdTableType AS TABLE (UserID int)
-- Create SP That Uses TVP Type
CREATE PROCEDURE GetUsers
@UserIdFilter UserIdTableType READONLY
AS
SELECT * FROM @UserIdFilter WHERE UserID > 2
Run Code Online (Sandbox Code Playgroud)
执行的工作方法:
DECLARE @MyIds AS UserIdTableType
INSERT INTO @MyIds SELECT UserID FROM Users
EXEC GetUsers @MyIds
Run Code Online (Sandbox Code Playgroud)
要求执行的方法:
EXEC …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
c# ×2
ninject ×2
azure ×1
comparison ×1
dapper ×1
interface ×1
log4net ×1
oop ×1
orchardcms ×1
sql-server ×1
vpn ×1
web-config ×1