小编Ray*_*Ray的帖子

Unity 3,RegisterTypes方法在哪里?

我刚刚下载了Unity 3,试试我的新项目.该文档声明此版本允许使用container.RegiserTypes方法按约定注册.但我无法在任何地方找到这种方法.我错过了额外的DLL吗?我使用Nuget将Unity 3添加到我的项目中.

c# dependency-injection inversion-of-control unity-container

5
推荐指数
2
解决办法
2590
查看次数

构造函数中的Func <T>参数是否会降低我的IoC解析速度?

我正在努力提高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>用作参数的事实吗?如果它导致缓慢,我可以改变什么?

c# inversion-of-control unity-container simple-injector

5
推荐指数
1
解决办法
858
查看次数

如何忽略ASP.NET MVC路由中的特定路由

如果我希望应用程序忽略以"得分"一词开头的所有网址,那么在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)

c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-4

5
推荐指数
1
解决办法
7750
查看次数

当一个线程调用WaitOne时,如何找到发回信号的其他线程?

我在多线程编程中难以理解的一件事是,当一个线程到达一个调用的行时,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()线时,线程被阻塞.但是谁在等待?哪个"其他"线程会发送信号?

c# multithreading

5
推荐指数
1
解决办法
100
查看次数

如何等待进行异步调用的.each循环?

我有一些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)

javascript jquery

3
推荐指数
1
解决办法
1367
查看次数

MVC结合ASP.NET Core中的WebAPI,但是Views在哪里?

我正在尝试掌握新的 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 模板创建的应用程序?

asp.net-web-api asp.net-core-mvc asp.net-core

3
推荐指数
1
解决办法
1284
查看次数

无法理解C#泛型

我能够理解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)

c# generics

2
推荐指数
1
解决办法
376
查看次数

在XAML的底部显示DevExpress DXTabControl选项卡

有谁知道如何在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)

xaml devexpress-wpf

2
推荐指数
1
解决办法
1327
查看次数

防止Log4Net写入所有日志文件

我使用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元素.

log4net log4net-configuration

2
推荐指数
1
解决办法
1062
查看次数

如何在Visual Studio解决方案中找到所有命名空间?

我问这个问题是因为我的解决方案中出现了编译错误:'GiftCard'是'命名空间'但是像'类型'一样使用

我尝试添加一个using指令,如:using GiftCard.Data.Entity;

这是找到GiftCard的正确命名空间,但错误不会消失.当我在我的代码中添加完全限定名称时,即GiftCard.Data.Entity.GiftCard

...然后错误消失,代码编译.

但我想知道为什么using指令不起作用.每次我需要使用类型时,我都不想用完全限定的名称来混淆我的代码.不知何故,错误消息说我将GiftCard定义为某个名称空间.那么如何在我的解决方案中找到所有命名空间,以便我知道它的定义位置,因为我需要删除或重命名GiftCard命名空间.

.net c# namespaces visual-studio visual-studio-2012

1
推荐指数
1
解决办法
6528
查看次数