我们正在使用 ASP.NET MVC 开发一个相当大的应用程序,一开始我们发现拥有一个具有常见 CRUD 操作(新建、保存、删除...)以及默认列表操作的抽象基本控制器可能很有用。在我们的例子中,我们有 20 多个实体通过这种控制器进行管理。
这有效并避免了重复一些代码并使应用程序更加同构,但是当您看到控制器时很难准确地看到它实现了哪些操作,并且它可能实现了一些不应该存在的操作。例如,假设您想要编辑传递名称而不是 id,则必须创建一个新的 EditByName(name),即使这样做,您仍然可以使用 Edit(id) 操作,因为它位于基础中。
对我来说,整个事情对我来说有点味道,但我没有找到任何显示替代方案的示例,因为我看到的 MVC 应用程序的领域非常狭窄。有什么建议吗?有什么例子吗?(我不一定使用 ASP.NET MVC,我认为这个问题对于任何 MVC 框架来说都是非常普遍的)。
一旦解决了加载插件的问题(在.NET中通过MEF),下一步要解决的是与它们的通信.简单的方法是实现一个接口并使用插件实现,但有时插件只需要扩展应用程序的工作方式,并且可能有很多扩展点.
我的问题是如何处理这些扩展点.我已经看到了不同的方法,但我不确定每个方法的优点和缺点,以及是否有更多更好的方法来实现这一点:
你有没有使用过暴露的方法之一?哪一个最适合你?
在您提出要求之前,我们的应用程序是一个可扩展的核心(用户,rola和内容管理),以构建我们的客户端特定的以内容为中心的Web应用程序.一切都建立在ASP.NET MVC之上.
我已经实现了一个分页html助手(改编自史蒂文桑德森的书).这是当前的代码:
public static string PageLinks(this HtmlHelper html,int currentPage,int totalPages,Func pageUrl){StringBuilder result = new StringBuilder();
for (int i = 1; i <= totalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == currentPage)
tag.AddCssClass("selectedPage");
result.AppendLine(tag.ToString());
}
return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这会产生一系列链接到我的项目的每个页面.如果有很多页面,这可能有点压倒性.我正在寻找一个类似的实现,产生一些不那么压倒性的东西:
其中6是当前页面.我确信有人必须实施类似的东西...在我必须重新实施轮子之前.
谢谢.
基督教
这是我的NLog配置文件.
<?xml version="1.0" ?>
<nlog autoReload="true" throwExceptions="true" internalLogLevel="Debug" internalLogToConsole="true"
internalLogFile="c:\\temp\\nlog.txt"
>
<targets>
<!--Useful for debugging-->
<target name="consolelog" type="ColoredConsole"
layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" />
<target name="filelog" type="File" fileName="c:\\temp\\nlog1.txt"
layout="${date}: ${message}" />
<target name="eventlog" type="EventLog" source="My App" log="Application"
layout="${date}: ${message} ${stacktrace}" />
<target name="databaselog" type="Database">
<dbProvider>sqlserver</dbProvider>
<!-- database connection parameters -->
<!-- alternatively you could provide a single 'connectionstring' parameter -->
<connectionString>Data Source=.\SQLEXPRESS;Initial Catalog=SnSolutions;User Id=sa;Password=test@1234@;</connectionString>
<!--<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyTest;User Id=mytest;Password=mytest123;" providerName="System.Data.SqlClient" />-->
<commandText>
insert into NLog_Error ([time_stamp],[level],[host],[type],1,[logger],[message],[stacktrace],[allxml]) values(@time_stamp,@level,@host,@type,@source,@logger,@message,@stacktrace,@allxml);
</commandText>
<parameter name="@time_stamp" layout="${date}" />
<parameter …Run Code Online (Sandbox Code Playgroud)