我用C#写了一个windows服务.一开始的要求是我应该只运行该服务的一个实例,但是已经改变了,现在我需要多个实例.这就是我需要根据配置文件更改服务名称的原因.
使用正确的名称注册的最佳方法是什么?我应该写另一个工具来做吗?我可以从App.config文件中读取名称并在服务和安装程序类中相应地设置它吗?
PS>我真的不明白名称是如何工作的 - 应该在服务和安装程序类中设置名称,但是当使用installutil.exe甚至PowerShell new-service进行安装时,也应该指定名称.那必须是一样的吗?或者一个覆盖另一个?
我想在ASP.NET MVC 3中使用Silverlight Multi File Uploader.问题是我需要使用ashx处理程序来处理文件上传(处理程序是库的一部分).如何将处理程序与ASP.NET MVC 3集成(我正在使用Razor视图引擎)?
我想创建一个通用机制来处理C#中的消息.我在我的小应用程序中需要这个,所以我不想使用完整的消息总线.我的要求很简单:
Message1,Message2.他们可以从一个基类继承,这不是问题,但如果不是,我不在乎.目前他们确实继承了Message.能够为每个消息类获取处理程序.即如果我发送Message1,那么Message1Handler应该实例化类.处理程序必须实现IMessageHandler<T>,其中T是消息类.IMessageHandler定义如下:
interface IMessageHandler<T>
{
void Execute(T message);
}
Run Code Online (Sandbox Code Playgroud)我写了一个简单的"解析器"类:
public static class HandlerRegistry
{
private static readonly Dictionary<string, Type> _handlers = new Dictionary<string, Type>();
public static void Register<T, T2>() where T2: IMessageHandler<T>
{
_handlers.Add(typeof(T).FullName, typeof(T2));
}
public static IMessageHandler<T> Resolve<T>(T parameters)
{
var type = _handlers[parameters.GetType().FullName];
return (IMessageHandler<T>) Activator.CreateInstance(type);
}
}
Run Code Online (Sandbox Code Playgroud)
在这个实现中,一切都很好,但是一部分 - 转换为IMessageHandler.当我试图将它与消息集合一起使用时,会发生这样的情况:编译器在编译时不知道集合中将会有什么实际消息 - 它只是假设它们都是子类Message,所以它是试图投射IMessageHandler<ConcreteMessage>到IMessageHandler<Message>显然我得到一个无效演员的异常.在这种情况下,可能的逆变会有所帮助,但我无法将参数声明为out,因为我在Execute方法参数中有消息. …
在我的一个应用程序中,我有一个这样的代码:
<ProgressBar Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Height="27" Margin="5,0,5,0" Maximum="{Binding TabuProgressEnd}" Value="{Binding TabuProgress}" />
Run Code Online (Sandbox Code Playgroud)
虽然我在测试这一切都没问题,但是当我的客户端在VS下打开它并运行此代码时抛出异常:
An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll
Additional information: A TwoWay or OneWayToSource binding cannot work on the read-only property 'TabuProgress' of type 'TSPLib.TabuEngine'.
Run Code Online (Sandbox Code Playgroud)
通常我会认为这是某种骗局,但我知道这个家伙不知道编码并使"Mode = OneWay"明确有帮助.不同机器上的默认绑定模式有何不同?
我正在创建自己的类型来表示css值(例如像素,例如12px).为了能够添加/减去/乘以/ ...我的类型和整数我已经在int中定义了两个隐式运算符.一切都很好,除了一件事..如果我写:
CssUnitBase c1 = 10;
Console.WriteLine(c1);
Run Code Online (Sandbox Code Playgroud)
我得到"10"而不是"10px" - 使用隐式转换为int而不是ToString()方法.我怎么能防止这种情况?
我已经研究了使用C#通过SMO创建数据库备份的可能性.任务非常简单,代码简单明了.我只有一个问题:如何检查备份是否真的被创建了?
SqlBackup.SqlBackup方法返回没有参数,我甚至不知道它是否抛出任何异常.(我唯一知道的是它是阻塞的,因为还有SqlBackupAsync方法)
我将不胜感激任何帮助.
我想知道我是否做了这样的事情:
class A
{
public MethodA()
{
}
public MethodB()
{
ExternalObject.Click += this.MethodA;
}
public MethodC()
{
ExternalObject.Click -= this.MethodA;
}
}
A a = new A();
a.MethodB();
a.MethodC();
Run Code Online (Sandbox Code Playgroud)
这会起作用吗?通过"工作"我的意思是 - MethodA是否会取消订阅ExternalObject.Click事件?
以及其他相关问题:
当使用实例方法而不是委托实例时,幕后会发生什么?(如上)
这会导致隐式创建委托吗?
-=操作员如何在代表之间进行比较 - 通过引用或者更复杂的事情发生?
我有以下代码:
set transaction isolation level read committed; --this is for clarity only
DECLARE @jobName nvarchar(128);
BEGIN TRAN
SELECT @jobName = JobName
FROM dbo.JobDetails
WHERE ExecutionState_Status = 1
WAITFOR DELAY '00:00:10'
UPDATE dbo.JobDetails
SET ExecutionState_Status = 10
WHERE JobName = @jobName
COMMIT
Run Code Online (Sandbox Code Playgroud)
第二件几乎是相同的:
set transaction isolation level read committed;
DECLARE @jobName nvarchar(128);
BEGIN TRAN
SELECT @jobName = JobName
FROM dbo.JobDetails
WHERE ExecutionState_Status = 1
WAITFOR DELAY '00:00:15'
UPDATE dbo.JobDetails
SET ExecutionState_Status = 20
WHERE JobName = @jobName
COMMIT
Run Code Online (Sandbox Code Playgroud)
不同之处在于我们设定的状态(10对20)和延迟(10对15对).
我在Management Studio中并行执行它们 …
我需要在ASP.NET MVC应用程序中使用多个连接字符串.我怎么能这样做?现在我正在注册连接如下:
builder.RegisterType<SqlConnection>().WithParameter(
"connectionString",
WebConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)
.InstancePerLifetimeScope()
.ExternallyOwned();
builder.Register(c => new ContextDataContext(c.Resolve<SqlConnection>())).InstancePerDependency();
Run Code Online (Sandbox Code Playgroud) 我有一个组件层次结构:
App
|
Child
|
Input
Run Code Online (Sandbox Code Playgroud)
组件"Child"接受来自其父级的模板,如下所示:
<my-child>
<ng-template>
<my-input></my-input>
<span>asdasdas</span>
<my-input></my-input>
<my-input></my-input>
</ng-template>
</my-child>
Run Code Online (Sandbox Code Playgroud)
正如您在模板中看到的那样,有许多输入组件.现在我想访问<my-input>子组件中的组件列表.我现在尝试的是使用@ ContentChildren/@ ViewChildren,但它似乎不起作用.子组件的代码:
@Component({
selector: 'my-child',
providers: [],
template: `
<div>
<ng-template [ngTemplateOutlet]="inputTemplate" #input></ng-template>
</div>
`,
directives: []
})
export class Child implements OnInit, OnAfterViewInit {
@ContentChild(TemplateRef) inputTemplate: TemplateRef<any>;
@ViewChildren(InputComponent) inputComponents : QueryList<InputComponent>;
constructor() {
}
ngAfterViewInit(){
//THIS SHOULD NOT BE EMPTY
console.log(this.inputComponents.toArray());
}
}
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么,以及如何从Child组件中获取InputComponents列表.
也许我不应该在这里使用模板?有没有其他方法可以自定义此控件,仍然可以访问嵌套的InputComponents列表?
如果你想玩它,这里是plunker