我怎样才能自动生成自由接收并存储服务的构造函数?(How can I automatically g

2019-10-19 01:35发布

问题

我经常发现自己手工输入了代码,如下所示:

public class SomeClass
{
    readonly ServiceA serviceA;
    readonly ServiceB serviceB;

    public SomeClass(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA.;
        this.serviceB = serviceB;
    }
}

要求

我想通过具有方法来产生尽可能多的这地节省时间。 我不想使用需要购买的工具。 是可变的,这里唯一的信息是类名和类型的服务。 因此,在这个例子中,我想应该键入类似这样的东西最少的:

  1. 有些 + 快捷键
  2. SomeClass
  3. ServiceA
  4. ServiceB
  5. 输入

我也持开放的态度仍然需要我键入的字段名称的解决方案。 我不介意是否private访问修饰符是存在于字段定义,但我宁愿没有,因为它的代码是有点精简的方式。 同样的,我愿意接受,不会产生只读领域的解决方案,但我不喜欢他们,因为我很少想我的类被初始化后更改的服务。

我已经试过

我知道的最快的解决办法,此刻是在另一段代码来键入类似以下内容并告诉Visual Studio来创建其使用的类和构造。

new SomeClass((ServiceA)null, (ServiceB)null);

不过,我并不总是在这个顺序工作; 有时我想使用它之前创建一个类。 所以我通常做的是这样的:

  1. 调用ctor的代码片断。
  2. 填写构造函数体。
  3. 使用的CodeRush随心产生的字段。 (它提供了一种方法来生成只读字段,而Visual Studio中,不使他们只读。)

代码片段工作得很好,但我不认为他们支持的参数变量数目,所以他们很可能不适合于这个问题。

Answer 1:

转到您的默认的C#代码片段位置,一般在C:\ Program Files文件(x86)的\微软的Visual Studio 10.0 \ VC#\片段\ 1033 \ Visual C#和使ctor.snippet的拷贝到你的个人代码片段的位置,重命名它,并给它一个恰当的名称和快捷键。 然后更改声明(看看其他现有的),像下面可以做的工作。 一旦你创建它,你可以简单地输入svc + TAB在一个空的类文件(或任何快捷键选择,然后按Tab),你应该得到的内容填满,或者你可以自定义一个类模板,所以当你做添加新的,您可以选择您的新模板。

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Some Constructor</Title>
            <Shortcut>svc</Shortcut>
            <Description>my description</Description>
            <Author>Jason was here</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>accessor</ID>
                    <ToolTip>Access modifier</ToolTip>
                    <Default>public</Default>
                </Literal>
                <Literal Editable="false">
                    <ID>classname</ID>
                    <ToolTip>Class name</ToolTip>
                    <Function>ClassName()</Function>
                    <Default>ClassNamePlaceholder</Default>
                </Literal>
                <Literal Editable="true">
                    <ID>svcA</ID>
                    <ToolTip>Service A</ToolTip>
                    <Default>ServiceA</Default>
                </Literal>
                <Literal Editable="true">
                    <ID>svcAvar</ID>
                    <ToolTip>Service A</ToolTip>
                    <Default>serviceA</Default>
                </Literal>
                <Literal Editable="true">
                    <ID>svcB</ID>
                    <ToolTip>Service B</ToolTip>
                    <Default>ServiceB</Default>
                </Literal>
                <Literal Editable="true">
                    <ID>svcBvar</ID>
                    <ToolTip>Service B</ToolTip>
                    <Default>serviceB</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp"><![CDATA[readonly $svcA$ $svcAvar$;
    readonly $svcB$ $svcBvar$;

    $accessor$ $classname$ ($svcA$ serviceA, $svcB$ serviceB)
    {
        this.$svcAvar$ = serviceA;
        this.$svcBvar$ = serviceB
    }$end$]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

在上面我们声明变量的类svcA = ServiceAsvcB = ServiceB ,类变量svcAvar = serviceAsvcBvar = serviceB ,所以我们可以很容易地修改在一个位置,你可以在构造等创造更多的PARAMS ,但应该足以让你开始。

关于则params的可变数量,你可以使用默认的PARAMS字面那么这将让你输入你需要的任何PARAMS你插入的构造函数后,如果您有不同类级变量,然后就像其他人所说,创建几个片段与不同快捷键,如SVC,svc1,svc2,svc3

<Literal>
    <ID>params</ID>
    <ToolTip>Parameter list</ToolTip>
    <Default></Default>
</Literal>

然后...<![CDATA[$accessor$ $classname$ (...$params$)



文章来源: How can I automatically generate a constructor that receives and stores services for free?