You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/01_more_effective_way.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -61,7 +61,7 @@ It’s possible to preview or even debug the code generated by Metalama. The rea
61
61
-**Real-time feedback and code modifications**
62
62
-**Preview and debug generated code**
63
63
64
-
You can find the source code of this example, as well as more examples, on [GitHub](https://github.com/postsharp/Metalama.Demo/blob/master/src/01_Log/LogAttribute.cs?mtm_campaign=awareness&mtm_source=instantly). You can learn more about Metalama thanks to the [video tutorials](https://doc.postsharp.net/metalama/videos?mtm_campaign=awareness&mtm_source=instantly) and [commented examples](https://doc.postsharp.net/metalama/examples?mtm_campaign=awareness&mtm_source=instantly).
64
+
You can find the source code of this example, as well as more examples, on [GitHub](https://github.com/postsharp/Metalama.Demo/blob/master/src/01_Log/LogAttribute.cs?mtm_campaign=awareness&mtm_source=instantly). You can learn more about Metalama thanks to the [video tutorials](https://doc.metalama.net/videos?mtm_campaign=awareness&mtm_source=instantly) and [commented examples](https://doc.metalama.net/examples?mtm_campaign=awareness&mtm_source=instantly).
65
65
66
66
Our development team is looking forward to your feedback and questions on our [Slack community workspace](https://www.postsharp.net/slack?mtm_campaign=awareness&mtm_source=instantly). Of course, you can also answer this email and I’ll make sure it will reach an engineer.
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/02_naming_conventions.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,7 +24,7 @@ LAMA0903. The type ‘MyInvoiceConverted’ does not respect the naming conventi
24
24
25
25
The shorter the feedback loop is, the smoother the code reviews will go! Not talking about the frustration both sides avoided!
26
26
27
-
You can learn more about code validation with Metalama in our [online documentation](https://doc.postsharp.net/metalama/examples?mtm_campaign=awareness&mtm_source=instantly).
27
+
You can learn more about code validation with Metalama in our [online documentation](https://doc.metalama.net/examples?mtm_campaign=awareness&mtm_source=instantly).
28
28
29
29
As I wrote in my first email, our development team is looking forward to your feedback and questions on our [Slack community workspace](https://www.postsharp.net/slack?mtm_campaign=awareness&mtm_source=instantly). Of course, you can also answer this email and I’ll make sure it will reach an engineer.
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/05_last.md
+14-14Lines changed: 14 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ Today, let's look into more advanced patterns in C# and explore how you can auto
8
8
9
9
If you're building a desktop or mobile app, or even a web app with client-side Blazor, you're likely familiar with the `INotifyPropertyChanged` interface. While it seems simple to implement, it can become cumbersome and error-prone as you add more complex properties and dependencies between objects.
10
10
11
-
Enter the `[Observable]` aspect from the open-source [Metalama.Patterns.Observability](https://doc.postsharp.net/metalama/patterns/observability?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) package.
11
+
Enter the `[Observable]` aspect from the open-source [Metalama.Patterns.Observability](https://doc.metalama.net/patterns/observability?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) package.
12
12
13
13
```csharp
14
14
[Observable]
@@ -37,11 +37,11 @@ This aspect handles `INotifyPropertyChanged` implementation for you, supporting
Considerhowmuchboilerplatecodeyou'd need to properly implement `INotifyPropertyChanged` for these scenarios and how much you would save with Metalama! To see the work Metalama does for you, [check out the diff](https://doc.postsharp.net/metalama/patterns/observability/standard-cases?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly).
40
+
Considerhowmuchboilerplatecodeyou'd need to properly implement `INotifyPropertyChanged` for these scenarios and how much you would save with Metalama! To see the work Metalama does for you, [check out the diff](https://doc.metalama.net/patterns/observability/standard-cases?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly).
41
41
42
42
It's not just about saving code, but also about enhancing code quality. Remember the last bug when you forgot to add a call to `OnPropertyChanged` for a computed property? With `[Observable]`, since dependency discovery is fully automatic, this won'thappenanymore.
Howrepetitive! Doyoureallywanttowritethiscodebyhand? Thankfully, [thiscanbeautomatedusingMetalama](https://doc.postsharp.net/metalama/examples/builder?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly), and you can tailor the code generation pattern to fit your needs.
96
+
Howrepetitive! Doyoureallywanttowritethiscodebyhand? Thankfully, [thiscanbeautomatedusingMetalama](https://doc.metalama.net/examples/builder?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly), and you can tailor the code generation pattern to fit your needs.
- [Parametervalidation](https://doc.postsharp.net/metalama/examples/validation?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) and [code contracts](https://doc.postsharp.net/metalama/patterns/contracts);
- [Exceptionhandling](https://doc.postsharp.net/metalama/examples/exception-handling?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) with or without [Polly](https://doc.postsharp.net/metalama/examples/exception-handling/retry/retry-5);
105
-
- [Caching](https://doc.postsharp.net/metalama/patterns/caching?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) and [memoization](https://doc.postsharp.net/metalama/patterns/memoization?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly);
106
-
- [INotifyPropertyChanged](https://doc.postsharp.net/metalama/patterns/observability), WPF [commands](https://doc.postsharp.net/metalama/patterns/wpf/command?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly), and [dependency properties](https://doc.postsharp.net/metalama/patterns/wpf/dependency-property?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly);
- [Changetracking](https://doc.postsharp.net/metalama/examples/change-tracking?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) and the [Memento pattern](https://doc.postsharp.net/metalama/examples/memento?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly).
- [Builder](https://doc.postsharp.net/metalama/examples/builde?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly), and [Singleton](https://doc.postsharp.net/metalama/examples/singleton?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) patterns;
- [Parametervalidation](https://doc.metalama.net/examples/validation?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) and [code contracts](https://doc.metalama.net/patterns/contracts);
- [Exceptionhandling](https://doc.metalama.net/examples/exception-handling?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) with or without [Polly](https://doc.metalama.net/examples/exception-handling/retry/retry-5);
105
+
- [Caching](https://doc.metalama.net/patterns/caching?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) and [memoization](https://doc.metalama.net/patterns/memoization?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly);
106
+
- [INotifyPropertyChanged](https://doc.metalama.net/patterns/observability), WPF [commands](https://doc.metalama.net/patterns/wpf/command?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly), and [dependency properties](https://doc.metalama.net/patterns/wpf/dependency-property?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly);
- [Changetracking](https://doc.metalama.net/examples/change-tracking?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) and the [Memento pattern](https://doc.metalama.net/examples/memento?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly).
- [Builder](https://doc.metalama.net/examples/builde?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly), and [Singleton](https://doc.metalama.net/examples/singleton?mtm_campaign=awareness&mtm_kwd=email5&mtm_source=instantly) patterns;
Copy file name to clipboardExpand all lines: metalama-email-course/015-vsx.md
+5-2Lines changed: 5 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,9 @@
1
1
# Have You Installed Visual Tools for Metalama?
2
2
3
-
If you are using Visual Studio 2022 (any edition), ensure that you have installed the [Visual Tools for Metalama and PostSharp](https://www.postsharp.net/links/download-unified-vsx). While not a prerequisite for using Metalama, this tool significantly simplifies the process by offering several useful features in the IDE.
3
+
If you are using Visual Studio 2022 (any edition), ensure that you have installed the [Visual Tools for Metalama](https://marketplace.visualstudio.com/items?itemName=PostSharpTechnologies.PostSharp). While not a prerequisite for using Metalama, this tool significantly simplifies the process by offering several useful features in the IDE.
4
+
5
+
> [!NOTE]
6
+
> Visual Tools for Metalama are not open source but are **FREE** for individuals, non-commercial use, and companies with up to 3 users under the Metalama Community license.
4
7
5
8
## Metalama Diff
6
9
@@ -54,4 +57,4 @@ Experienced Metalama users will appreciate both the syntax highlighting and the
54
57
55
58
## Summary
56
59
57
-
If you are using Visual Studio 2022, don't miss the [Visual Tools for Metalama and PostSharp](https://www.postsharp.net/links/download-unified-vsx). It offers plenty of features to make your work with Metalama easier.
60
+
If you are using Visual Studio 2022, don't miss the [Visual Tools for Metalama](https://marketplace.visualstudio.com/items?itemName=PostSharpTechnologies.PostSharp). It offers plenty of features to make your work with Metalama easier.
Copy file name to clipboardExpand all lines: metalama-email-course/030-caching.md
+9-5Lines changed: 9 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ You can add caching to your app in just three steps:
12
12
13
13
1. Add the [Metalama.Patterns.Caching.Aspects](https://www.nuget.org/packages/Metalama.Patterns.Caching.Aspects/) package to your project.
14
14
2. Navigate to all methods that need caching and add the `[Cache]` custom attribute.
15
-
3. Go to the application startup code and call `AddCaching`, which adds the `ICachingService` interface to your `IServiceCollection`, enabling the `[Cache]` aspect to be used on all objects instantiated by the DI container. This code is rather standard and we omit it for brevity, but you can find it in the [documentation](https://doc.postsharp.net/metalama/patterns/caching/getting-started).
15
+
3. Go to the application startup code and call `AddCaching`, which adds the `ICachingService` interface to your `IServiceCollection`, enabling the `[Cache]` aspect to be used on all objects instantiated by the DI container. This code is rather standard and we omit it for brevity, but you can find it in the [documentation](https://doc.metalama.net/patterns/caching/getting-started).
16
16
17
17
Let's examine what the `[Cache]` attribute does with your code. Consider the following example:
18
18
@@ -147,16 +147,20 @@ using Metalama.Patterns.Caching.Aspects;
The Metalama [documentation](https://doc.postsharp.net/metalama/patterns/caching/getting-started) illustrates the same example as above, but without using Dependency Injection. As before, caching can be added via a single `[Cache]` attribute and it will produce the same result.
150
+
The Metalama [documentation](https://doc.metalama.net/patterns/caching/getting-started) illustrates the same example as above, but without using Dependency Injection. As before, caching can be added via a single `[Cache]` attribute and it will produce the same result.
151
151
152
152
## Going Further with Caching
153
153
154
-
Metalama not only simplifies the implementation of caching but also provides means to customize your cache keys, exclude certain parameters, and invalidate a particular cache by merely adding an attribute. This principle even extends to configuring the caching itself via the `[CachingConfiguration()]` attribute.
154
+
Metalama not only simplifies the implementation of caching but also provides means to customize your cache keys, exclude certain parameters, and invalidate a particular cache by merely adding an attribute. This principle even extends to configuring the caching itself via the `[CachingConfiguration]` attribute.
155
155
156
156
Applying caching to an application can dramatically improve performance, but implementing the pattern is not straightforward. Metalama does all the heavy lifting for you and provides several flexible implementations that you can customize to meet your specific requirements.
157
157
158
-
If you have a distributed application that could benefit from caching, Metalama has that [covered for you](https://doc.postsharp.net/metalama/patterns/caching/redis).
158
+
## Distributed Caching
159
+
160
+
If you have a distributed application that could benefit from caching, Metalama has that [covered for you](https://doc.metalama.net/patterns/caching/redis).
161
+
162
+
Metalama also supports the synchronization of [local in-memory caches for multiple servers](https://doc.metalama.net/patterns/caching/pubsub), offering support for both the Azure service bus and Redis Pub/Sub.
163
+
159
164
160
-
Metalama also supports the synchronization of [local in-memory caches for multiple servers](https://doc.postsharp.net/metalama/patterns/caching/pubsub), offering support for both the Azure service bus and Redis Pub/Sub.
161
165
162
166
By leveraging Metalama, you'll find that implementing caching is both simpler and more efficient than creating a bespoke solution.
Copy file name to clipboardExpand all lines: metalama-email-course/052-naming-conventions.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,8 @@
1
1
# Validating Naming Conventions
2
2
3
-
In my previous email, I demonstrated how Metalama can generate boilerplate code on-the-fly during compilation, automating the task of implementing necessary but repetitive code. However, code generation is not the only functionality Metalama offers. In this email, I will explore Metalama's second pillar: its ability to validate source code against architectural rules, starting with naming conventions.
3
+
In my previous emails, I demonstrated how Metalama can generate boilerplate code on-the-fly during compilation, automating the task of implementing necessary but repetitive code. However, code generation is not the only functionality Metalama offers. In this email, I will explore Metalama's second pillar: its ability to validate source code against architectural rules, starting with naming conventions.
4
+
5
+
4
6
5
7
## Why Care About Naming Conventions?
6
8
@@ -114,4 +116,4 @@ We can see our warning in action below.
114
116
115
117
## Summary
116
118
117
-
Although both examples were quite simple, they illustrate how Metalama can be used to help validate your codebase and enforce rules. More information about this topic can be found in the [Metalama Documentation](https://doc.postsharp.net/metalama/conceptual/architecture/naming-conventions).
119
+
Although both examples were quite simple, they illustrate how Metalama can be used to help validate your codebase and enforce rules. More information about this topic can be found in the [Metalama Documentation](https://doc.metalama.net/conceptual/architecture/naming-conventions).
Copy file name to clipboardExpand all lines: metalama-email-course/090-add-logging-with-fabric.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -57,5 +57,5 @@ If we desired to target a Type or a Namespace, we could accomplish it with eithe
57
57
58
58
Fabrics are not only beneficial for appending aspects to your code, but they can also be utilized to implement architectural rules in your codebase.
59
59
60
-
You can read more about Fabrics [here](https://doc.postsharp.net/metalama/conceptual/using/fabrics). It's one of Metalama's more advanced features, but understanding how it operates will enable you to perform tasks that might have previously seemed nearly unachievable.
60
+
You can read more about Fabrics [here](https://doc.metalama.net/conceptual/using/fabrics). It's one of Metalama's more advanced features, but understanding how it operates will enable you to perform tasks that might have previously seemed nearly unachievable.
0 commit comments