說我有這樣大量的樣板代碼:有沒有辦法使用PostSharp使構造函數參數在類級別可見?
class MyClass
{
private readonly IDependencyA dependencyA;
private readonly IDependencyB dependencyB;
public MyClass(
IDependencyA dependencyA,
IDependencyB dependencyB)
{
if(dependencyA == null) throw ArgumentNullException("dependencyA");
if(dependencyB == null) throw ArgumentNullException("dependencyB");
this.dependencyA = dependencyA;
this.dependencyB = dependencyB;
...
}
...
public void SomeMethod()
{
this.dependencyA.DoSomething(this.dependencyB);
}
}
是否有使用類似PostSharp除去樣板代碼,使它看起來像這樣的方式:
class MyClass
{
[ConstructorParametersAreClassMembers]
public MyClass(
IDependencyA dependencyA,
IDependencyB dependencyB)
{
...
}
...
public void SomeMethod()
{
this.dependencyA.DoSomething(this.dependencyB);
}
}
是這樣甚至可能嗎?
另外:這實際上是它在F#中默認工作的方式。
這很酷,但如果我需要在構造函數中運行某種其他初始化代碼會發生什麼?也許我可以改變它,所以它調用了一個我不得不實現的'private'無參數構造函數。 –
T4模板在其自己的文件中生成一個帶有構造函數的分類;它不會改變原來的類(除非它可能將類標記爲「部分」)。如果您需要「自定義」構造函數,只需將其添加到類中,並且生成的構造函數將消失。順便說一句。在執行依賴注入時,在服務類中進行任何其他初始化應該是非常不尋常的。 – Steven
當然,但我的構造函數可能90%實際上是在構造函數中進行一些初始化,所以這不起作用。我意識到它不能在原始文件中創建構造函數,但是直到我添加一個之後纔會編譯。你將不得不修改T4腳本來忽略私人構造函數,當決定什麼類添加部分類... –