在我的插件架构中,我目前正在将插件名称(字符串),方法名称(字符串)和参数(对象数组)传递给我的插件服务,以执行指定的方法并返回结果(类型为T).
插件服务的execute方法如下所示:
public TResult Execute<TResult>(string pluginName, string operation, params object[] input) {
MethodInfo method = null;
TResult result = default(TResult);
var plugin = _plugins.Enabled().FirstOrDefault(x => x.GetType().Name.Equals(pluginName, StringComparison.InvariantCultureIgnoreCase));
if (plugin != null) {
method = plugin.GetType().GetMethods().FirstOrDefault(x => x.Name == operation);
if (method != null) {
result = (TResult)method.Invoke(plugin, input);
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
示例用法:
var url = AppHelper.PluginService.Execute<string>(
"ImagePlugin",
"GetImageUrl",
new object[] { image, size });
Run Code Online (Sandbox Code Playgroud)
我宁愿做的是传递匿名类型(因为我认为这更具可读性)即
var url = AppHelper.PluginService.Execute<string>(
"ImagePlugin",
"GetImageUrl",
new { image = image, targetSize = …Run Code Online (Sandbox Code Playgroud) 我有一个内置在ASP.NET MVC 3中的应用程序,它使用SQL CE进行存储,使用EF CTP 5进行数据访问.
我已将此站点部署到共享主机,但发现它始终被回收,因为它达到了他们(专用)应用程序池上设置的100mb限制.
在发布模式下运行时,该站点使用大约110mb RAM.
我尝试过使用SQL Server Express而不是CE,这没有什么区别.
唯一显着的区别是我完全删除了EF(使用假的回购).这使内存使用量降低了30mb-40mb.一个空白的MVC模板使用大约20mb所以我认为这不是太糟糕了?
"标准"ASP.NET MVC应用程序是否有任何基准?
了解其他EF CTP用户获得的内存利用率以及内存分析工具(最好是免费的)的一些建议会很好.
值得一提的是我如何处理EF ObjectContext的生命周期.我正在使用每个请求的会话并使用StructureMap实例化ObjectContext:
For<IDbContext>().HttpContextScoped().Use(ctx => new MyContext("MyConnStringName"));
Run Code Online (Sandbox Code Playgroud)
非常感谢Ben
我有一个固定高度的容器,包含图像和iframe.为了使图像响应并防止垂直和水平溢出,我可以设置以下CSS:
img {
max-width: 100%;
max-height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
这可确保纵向图像不会垂直溢出,并且横向图像不会水平溢出.
对于iframe,我使用"填充比" 技术,将包装元素的填充设置为iframe的宽高比(例如,对于16:9视频,为56.25%):
.iframe-wrapper {
position: relative;
height: 0;
padding-top: 56.25%;
overflow: hidden;
}
.iframe-wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
虽然这意味着iframe按视口宽度缩放,但如果我更改视口的高度,它将无法正常工作.基本上我喜欢iframe来模仿图像的工作方式.
我刚刚开始使用Dapper进行一个项目,过去几年大多使用像NHibernate和EF这样的ORM.
通常在我们的Web应用程序中,我们按请求实现会话,在请求开始时开始事务并在结束时提交它.
我们应该在直接使用SqlConnection/System.Transactions时做类似的事情吗?
StackOverflow如何做到这一点?
根据@gbn和@Sam Safron的建议,我没有使用交易.在我的情况下,我只是在进行读取查询,因此似乎没有真正的要求使用事务(与我所知道的隐式事务相反).
我创建了一个轻量级的会话接口,以便每个请求都可以使用一个连接.这对我来说非常有益,因为对于Dapper我经常需要创建一些不同的查询来构建一个对象,而宁愿共享相同的连接.
确定每个请求的连接并处理它的工作是由我的IoC容器(StructureMap)完成的:
public interface ISession : IDisposable {
IDbConnection Connection { get; }
}
public class DbSession : ISession {
private static readonly object @lock = new object();
private readonly ILogger logger;
private readonly string connectionString;
private IDbConnection cn;
public DbSession(string connectionString, ILogger logger) {
this.connectionString = connectionString;
this.logger = logger;
}
public IDbConnection Connection { get { return GetConnection(); } }
private IDbConnection GetConnection() {
if (cn == null) {
lock (@lock) …Run Code Online (Sandbox Code Playgroud) 我正在使用Gulp和main-bower-files来捆绑我的bower依赖项.
我需要确保在AngularJS之前包含jQuery,但由于Angular bower包实际上并不依赖于jQuery,因此它包含在之后.
有没有办法将jQuery推到源列表的顶部或覆盖Angular的依赖,所以它需要jQuery?
我尝试使用gulp-order插件来执行此操作,但它会混淆其余文件的原始顺序:
gulp.task('bower', function () {
var sources = gulp.src(mainBowerFiles(['**/*.js', '!**/*.min.js'])); // don't include min files
return sources
// force jquery to be first
.pipe(plugins.order([
'jquery.js',
'*'
]))
.pipe(plugins.sourcemaps.init())
.pipe(plugins.concat('libs.min.js'))
.pipe(plugins.uglify())
.pipe(plugins.sourcemaps.write('./'))
.pipe(gulp.dest(config.output))
.pipe(plugins.notify({ message: 'Bower task complete' }));
});
Run Code Online (Sandbox Code Playgroud) 我有一个asp.net mvc应用程序,我正在尝试使用IISExpress进行自定义错误.
适用于Casini罚款:
<customErrors mode="On" defaultRedirect="/error">
<error statusCode="404" redirect="/error/notfound"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
当我之前将mvc站点部署到IIS(7.5)之后,我所要做的就是设置我的自定义错误:
<httpErrors errorMode="Detailed"/>
Run Code Online (Sandbox Code Playgroud)
我已经尝试在httpErrors部分中明确指定状态代码,但没有任何作用.这是一个例子:
<httpErrors errorMode="Detailed" defaultResponseMode="Redirect">
<clear/>
<error statusCode="404" path="/error/notfound"/>
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢Ben
如何自定义Json.NET以序列化私有成员而不是序列化公共只读属性(不使用属性).
我创造了一个习惯,IContractResolver但我有点失落.
在我的网页上,我有一个文件列表.
每个文件都在它自己的容器div中(div class ="file").容器内部是文件和描述的链接.
我想允许用户单击容器上的任何位置来下载文件.我通过向容器添加click事件并检索子链接的href来完成此操作.
当文件在新窗口中打开时,如果用户实际单击该链接,则该文件将打开两次.
因此,我需要在单击超链接时阻止触发父容器单击事件.这样做的最佳方法是将超链接功能添加到超链接to0并设置event.stopPropagation吗?据推测,这将阻止事件冒泡到集装箱.
谢谢Ben
我第一次使用命令模式.我有点不确定我应该如何处理依赖项.
在下面的代码中,我们调度一个CreateProductCommand然后排队等待稍后执行的代码.该命令封装了执行所需的所有信息.
在这种情况下,我们可能需要访问某种类型的数据存储来创建产品.我的问题是,如何将此依赖项注入命令以便它可以执行?
public interface ICommand {
void Execute();
}
public class CreateProductCommand : ICommand {
private string productName;
public CreateProductCommand(string productName) {
this.ProductName = productName;
}
public void Execute() {
// save product
}
}
public class Dispatcher {
public void Dispatch<TCommand>(TCommand command) where TCommand : ICommand {
// save command to queue
}
}
public class CommandInvoker {
public void Run() {
// get queue
while (true) {
var command = queue.Dequeue<ICommand>();
command.Execute();
Thread.Sleep(10000);
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个带有以下签名的动作过滤器
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class UnitOfWorkAttribute : ActionFilterAttribute
Run Code Online (Sandbox Code Playgroud)
根据MSDN:
AllowMultiple属性指示属性的多个实例是否可以存在于元素上.如果设置为true,则允许多个实例; 如果设置为false(默认值),则只允许一个实例.
在MVC中,行为似乎有点奇怪.当我用这个属性修饰一个动作时,我发现OnActionExecuting过滤器的方法被执行了两次.
过滤器仅在操作上声明,而不是在控制器上声明,并且我已清除任何全局过滤器.有人可以解释这种行为吗?
asp.net-mvc ×2
c# ×2
.net ×1
bower ×1
css ×1
dapper ×1
gulp ×1
iframe ×1
iis-7.5 ×1
iis-express ×1
javascript ×1
json.net ×1
performance ×1
reflection ×1
sql-server ×1