我刚刚下载了Unity 3,试试我的新项目.该文档声明此版本允许使用container.RegiserTypes方法按约定注册.但我无法在任何地方找到这种方法.我错过了额外的DLL吗?我使用Nuget将Unity 3添加到我的项目中.
c# dependency-injection inversion-of-control unity-container
我正在努力提高IoC容器的性能.我们使用的是Unity和SimpleInjector,我们有一个带有这个构造函数的类:
public AuditFacade(
IIocContainer container,
Func<IAuditManager> auditManagerFactory,
Func<ValidatorFactory> validatorCreatorFactory,
IUserContext userContext,
Func<ITenantManager> tenantManagerFactory,
Func<IMonitoringComponent> monitoringComponentFactory)
: base(container, auditManagerFactory, GlobalContext.CurrentTenant,
validatorCreatorFactory, userContext, tenantManagerFactory)
{
_monitoringComponent = new Lazy<IMonitoringComponent>(monitoringComponentFactory);
}
Run Code Online (Sandbox Code Playgroud)
我还有另一个使用此构造函数的类:
public AuditTenantComponent(Func<IAuditTenantRepository> auditTenantRepository)
{
_auditTenantRepository = new Lazy<IAuditTenantRepository>(auditTenantRepository);
}
Run Code Online (Sandbox Code Playgroud)
我看到第二个在大多数时间内在1毫秒内得到解决,而第一个平均需要50-60毫秒.我确定较慢的原因是因为参数,它有更多的参数.但是,如何才能提高速度较慢的性能呢?这是我们Func<T>
用作参数的事实吗?如果它导致缓慢,我可以改变什么?
如果我希望应用程序忽略以"得分"一词开头的所有网址,那么在ASP.NET MVC应用程序中放入RouteConfig.RegisterRoutes方法的正确语法是什么
http://myserver/score*.*
?
换句话说,任何以文本"得分"开头的网址都希望我的应用忽略.
我试过了:
routes.IgnoreRoute("score*.*/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
我也尝试了这种语法的其他几种组合,但不能完全正确.
这是我目前在RouteConfig中所拥有的内容.这几乎是标准的东西.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Order", action = "Add", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud) 我在多线程编程中难以理解的一件事是,当一个线程到达一个调用的行时,WaitOne()
我如何知道涉及哪些其他线程?我在哪里或如何找到(或理解)WaitHandle
接收信号的方式?例如,我现在正在查看此代码:
private void RunSync(object state, ElapsedEventArgs elapsedEventArgs)
{
_mutex.WaitOne();
using (var sync = GWSSync.BuildSynchronizer(_log))
{
try
{
sync.Syncronize();
}
catch(Exception ex)
{
_log.Write(string.Format("Error during synchronization : {0}", ex));
}
}
_mutex.ReleaseMutex();
_syncTimer.Interval = TimeBeforeNextSync().TotalMilliseconds;
_syncTimer.Start();
}
Run Code Online (Sandbox Code Playgroud)
文件中有一些这样的方法(即RunThis(),RunThat()).这些方法在Windows服务中运行,并在Timer过去时调用.使用不同的定时器调用这些方法中的每一个并设置如下:
//Synchro
var timeBeforeFirstSync = TimeBeforeNextSync();
_syncTimer = new System.Timers.Timer(timeBeforeFirstSync.TotalMilliseconds);
_syncTimer.AutoReset = false;
_syncTimer.Elapsed += RunSync;
_syncTimer.Start();
Run Code Online (Sandbox Code Playgroud)
我知道当Timer过去时,该RunSync
方法将运行.但当它击中WaitOne()
线时,线程被阻塞.但是谁在等待?哪个"其他"线程会发送信号?
我有一些javascript代码使用http处理程序将一些数据更新到数据库,但这个异步调用是在.each
循环内部进行的.在循环结束时,我调用了CancelChanges()
刷新页面的函数.问题是在更新数据库之前页面似乎刷新了.该.each
循环似乎在调用后完成CancelChanges()
.在.each循环中完成所有异步调用后,如何确保刷新页面?
function SaveChanges() {
if (PreSaveValidation()) {
var allChangesSucceeded = true;
var studioId = $("#param_studio_id").val();
var baseDate = $("#param_selected_month").val().substring(6, 10) + $("#param_selected_month").val().substring(0,2);
var currency = "CAD";
var vacationPct = null;
var gvAdmissible = null;
$(".editable-unsaved").each( function() {
var newSalary = $(this).text();
var disciplineId = $(this).data("disciplineid");
var seniorityId = $(this).data("seniorityid");
var handlerCommand = "";
if ($(this).data("valuetype") === "inflated") {
handlerCommand = "AddAverageSalary";
} else if ($(this).data("valuetype") === "actual") {
handlerCommand = "UpdateAverageSalary";
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试掌握新的 ASP.NET Core 1.0,它指出 ASP.NET Web API 和 ASP.NET MVC 被合并到一个框架中。所以我决定使用 Visual Studio 2015 中的 ASP.NET Web API 模板创建一个新的 ASP.NET Core Web API 应用程序。
但是当我查看生成的文件/文件夹时,没有 Views 文件夹。ValuesController 已生成。我什至添加了自己的控制器,它返回 Web API 响应。但是我也应该能够在我的控制器中添加动作,比如返回部分视图,对吗?
由于这两个合并,我假设我应该能够看到一个 Views 文件夹,但我没有。如何将 MVC 部件添加到使用 Web Api 模板创建的应用程序?
我能够理解C#Generics,但只有当我在一本易于理解的例子中阅读它时才能理解它.但在现实生活中,我会看到复杂的C#Generics代码,如下所示.有人可以向我解释这段代码的一般方面吗?我看到了类型参数,但不明白为什么T没有在方法体中使用.T如何在体内使用?
public void ValidateExceptionFromResponse<T>( BaseClaimResponseDataContract<T> response )
{
if (response.CommunicationResponseCodes != null && response.CommunicationResponseCodes.Any())
{
var validateResult = new ValidationResults();
foreach (var communicationResponseCodeDataContract in response.CommunicationResponseCodes)
{
validateResult.AddResult( new ValidationResult(communicationResponseCodeDataContract.Description.Current, null, null, null, null));
}
throw FaultManager.GenerateFault(validateResult);
}
if( response.MessageError != null )
{
throw FaultManager.GenerateFault(eErrorCodes.Claims, response.MessageError.Current);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是BaseClaimResponseDataContract的代码段:
[KnownType(typeof(SummaryClaimsReportResponseDataContract))]
[KnownType(typeof(ClaimResponseDataContract))]
[KnownType(typeof(CommunicationResponseDataContract))]
[DataContract]
public class BaseClaimResponseDataContract<T>
{
[DataMember]
public bool IsRxClaim { get; set; }
[DataMember]
public ThirdPartyDataContract ThirdParty { get; set; }
[DataMember]
public ExternalSystemMessages RequestMessage { get; set; …
Run Code Online (Sandbox Code Playgroud) 有谁知道如何在XAML中使用DevExpress DXTabControl并将其设置为使标签显示在底部?这是我到目前为止,但标签显示在顶部.DevExpress文档没有这方面的例子.智能感知并没有给我任何直觉.
<dx:DXTabControl>
<dx:DXTabItem Header="Main">
<dxdo:DockLayoutManager>
<dxdo:LayoutGroup>
<dxdo:LayoutPanel Caption="TaskList">
<views:DxTaskList x:Name="Tasklst" />
</dxdo:LayoutPanel>
<dxdo:LayoutPanel Caption="TaskDetails">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Focusable="False">
<StackPanel>
<views:TaskDetails x:Name="TaskDtls"/>
</StackPanel>
</ScrollViewer>
</dxdo:LayoutPanel>
</dxdo:LayoutGroup>
</dxdo:DockLayoutManager>
</dx:DXTabItem>
</dx:DXTabControl>
Run Code Online (Sandbox Code Playgroud) 我使用log4net进行了以下配置.问题是我的C#代码中的记录器现在将错误记录到两个日志文件中.我在同一个Windows服务中有两个不同的服务类.我使用以下行在一个服务中初始化记录器:
private static readonly ILog _logger = LogManager.GetLogger(typeof(EmployeeImportService));
Run Code Online (Sandbox Code Playgroud)
但是当这个服务运行并记录时,它会写入两个日志文件.
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="C:\Temp\HRFiles\Sharp\Log\Log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
<appender name="OvertimeLogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="C:\Temp\HRFiles\YTD\Log\Log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="OvertimeLogFileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
如何配置它以便每个服务都写入自己的日志文件?我读到配置中的logger标签有一个additivity属性可以解决这个问题,但我的配置中没有logger元素.
我问这个问题是因为我的解决方案中出现了编译错误:'GiftCard'是'命名空间'但是像'类型'一样使用
我尝试添加一个using指令,如:using GiftCard.Data.Entity;
这是找到GiftCard的正确命名空间,但错误不会消失.当我在我的代码中添加完全限定名称时,即GiftCard.Data.Entity.GiftCard
...然后错误消失,代码编译.
但我想知道为什么using指令不起作用.每次我需要使用类型时,我都不想用完全限定的名称来混淆我的代码.不知何故,错误消息说我将GiftCard定义为某个名称空间.那么如何在我的解决方案中找到所有命名空间,以便我知道它的定义位置,因为我需要删除或重命名GiftCard命名空间.
c# ×6
.net ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
generics ×1
javascript ×1
jquery ×1
log4net ×1
namespaces ×1
xaml ×1