<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vinícius (Nico) Guedes</title>
    <description>The latest articles on DEV Community by Vinícius (Nico) Guedes (@nicoguedes).</description>
    <link>https://dev.to/nicoguedes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F542156%2Fdd214807-cb91-4eb4-8f93-d7a8ceae1108.jpeg</url>
      <title>DEV Community: Vinícius (Nico) Guedes</title>
      <link>https://dev.to/nicoguedes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nicoguedes"/>
    <language>en</language>
    <item>
      <title>The difference between using statements and using declarations in C#</title>
      <dc:creator>Vinícius (Nico) Guedes</dc:creator>
      <pubDate>Wed, 21 Dec 2022 15:33:09 +0000</pubDate>
      <link>https://dev.to/nicoguedes/the-difference-between-using-statements-and-using-declarations-in-c-273</link>
      <guid>https://dev.to/nicoguedes/the-difference-between-using-statements-and-using-declarations-in-c-273</guid>
      <description>&lt;p&gt;Since its release on &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history#c-version-80" rel="noopener noreferrer"&gt;C# 8.0 in September 2019&lt;/a&gt;, &lt;code&gt;using&lt;/code&gt; declarations became the most common way to initialize disposable objects, even being the default suggestion if you’re using Rider with Resharper. Whereas before we would wrap the code within a block, we can now just prefix our variable declaration with &lt;code&gt;using&lt;/code&gt;.&lt;br&gt;
I know that this is not a trending topic, but I always find it helpful to read different explanations of the same subject when I'm trying to understand something.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using statement:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Using declaration:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What exactly does “using” do with our variable?
&lt;/h2&gt;

&lt;p&gt;Whether you chose the classic approach (using statement) or using declaration, the end goal is to explicitly dispose your variable, without relying on the Garbage Collector. Something you could also achieve by doing this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Besides syntax, is there any other difference between those approaches?
&lt;/h2&gt;

&lt;p&gt;Yes. The difference is in the scope!&lt;/p&gt;

&lt;p&gt;With the &lt;code&gt;using&lt;/code&gt; statement, you’re delimitating the scope of your variable. It gets initialized when you open the block and disposed when you close it. Simple and readable, right? Here's an example of the variable not being available anymore once its code block is closed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;TestDbConnectionWithUsingStatementIncorrectScope&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExecuteNonQuery&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Compilation error.&lt;/span&gt;
        &lt;span class="c1"&gt;// The connection object isn't available&lt;/span&gt;
        &lt;span class="c1"&gt;// anymore as it has already been disposed.&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But how does the Compiler know when to dispose your variable if you just added a using declaration, without defining a block? The compiler will dispose your variable at the end of its current code block when it’s not usable anymore.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;TestDbConnectionWithUsingDeclaration&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExecuteNonQuery&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Code compiles successfully as all objects&lt;/span&gt;
  &lt;span class="c1"&gt;// will be disposed at this block end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same could be correctly implemented with using statement. With more lines of code and more code blocks than on the previous version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;TestDbConnectionWithUsingStatement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExecuteNonQuery&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It could also be done by explicitly calling the Dispose Method. The disadvantage is that you might forget to dispose one of your objects, and it's not as readable as the previous versions, depending on how many lines of code you have in your Method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;TestDbConnectionWithDispose&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExecuteNonQuery&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandText2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;command2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion: What should I use?
&lt;/h2&gt;

&lt;p&gt;That depends. If you want to decrease the number of scope blocks in your code, go for the &lt;code&gt;using&lt;/code&gt; declaration approach. In some specific cases though, where you don’t want your variable to be available in the whole context of your current block (maybe you’re dealing with a big Method in a Legacy application), you’d rather use the &lt;code&gt;using&lt;/code&gt; statement, explicitly defining when your variable should live.&lt;/p&gt;

</description>
      <category>webmonetization</category>
    </item>
    <item>
      <title>How to avoid AutoMapper configuration runtime errors</title>
      <dc:creator>Vinícius (Nico) Guedes</dc:creator>
      <pubDate>Tue, 06 Sep 2022 22:19:41 +0000</pubDate>
      <link>https://dev.to/nicoguedes/how-to-avoid-automapper-configuration-runtime-errors-28bn</link>
      <guid>https://dev.to/nicoguedes/how-to-avoid-automapper-configuration-runtime-errors-28bn</guid>
      <description>&lt;p&gt;When working with &lt;a href="https://automapper.org/"&gt;AutoMapper&lt;/a&gt;, we often bump into runtime errors due to invalid mapping configuration, such as this one:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wouldn't it be great if we could catch those errors before running our application?&lt;/p&gt;

&lt;p&gt;AutoMapper actually provides an assertion that we can add to our Unit Tests pipeline and make sure that no runtime error will happen.&lt;/p&gt;

&lt;p&gt;If you don't know how to create a Unit Test Project, follow the steps from this article: &lt;a href="https://xunit.net/docs/getting-started/netfx/visual-studio"&gt;Getting Started with xUnit.net.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using xUnit
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MappingTests&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IConfigurationProvider&lt;/span&gt; &lt;span class="n"&gt;_configuration&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IMapper&lt;/span&gt; &lt;span class="n"&gt;_mapper&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MappingTests&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_configuration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;MapperConfiguration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; 
            &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProfile&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MappingProfile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;());&lt;/span&gt;

        &lt;span class="n"&gt;_mapper&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateMapper&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Fact&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ShouldHaveValidConfiguration&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AssertConfigurationIsValid&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using NUnit
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MappingTests&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IConfigurationProvider&lt;/span&gt; &lt;span class="n"&gt;_configuration&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IMapper&lt;/span&gt; &lt;span class="n"&gt;_mapper&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MappingTests&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_configuration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;MapperConfiguration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; 
            &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProfile&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MappingProfile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;());&lt;/span&gt;

        &lt;span class="n"&gt;_mapper&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateMapper&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Test&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ShouldHaveValidConfiguration&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AssertConfigurationIsValid&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The NUnit example was taken from the &lt;a href="https://github.com/jasontaylordev/CleanArchitecture"&gt;Clean Architecture Template&lt;/a&gt;, provided by Jason Taylor.&lt;/p&gt;

&lt;p&gt;Please also check out the official &lt;a href="https://docs.automapper.org/en/stable/Configuration-validation.html"&gt;AutoMapper Configuration Validation documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>automapper</category>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
    </item>
    <item>
      <title>Consegui um trabalho remoto no exterior residindo no Brasil, e agora?</title>
      <dc:creator>Vinícius (Nico) Guedes</dc:creator>
      <pubDate>Thu, 17 Dec 2020 14:38:59 +0000</pubDate>
      <link>https://dev.to/nicoguedes/consegui-um-trabalho-remoto-no-exterior-residindo-no-brasil-e-agora-2khc</link>
      <guid>https://dev.to/nicoguedes/consegui-um-trabalho-remoto-no-exterior-residindo-no-brasil-e-agora-2khc</guid>
      <description>&lt;p&gt;Muitas vagas de trabalho remoto no exterior exigem que o candidato esteja residindo naquela localidade, por questões legais. Ser um digital nomad não é tão simples, já que no fim das contas, você precisa ser residente fiscal em algum país. Pense na seguinte situação: você trabalha para uma empresa estadunidense e reside no Brasil, a quem você deve pagar os encargos trabalhistas? Brasil ou Estados Unidos? Não sou contador, mas pela minha trajetória de carreira de residir na Irlanda e depois retornar ao Brasil trabalhando remoto, sei que neste caso o correto seria pagar os encargos ao país onde você reside: Brasil.&lt;/p&gt;

&lt;p&gt;Se você está aqui, é porque tem interesse ou até mesmo já fechou contrato com alguma empresa do exterior, e agora precisa saber como fará para receber o seu salário sem ter problemas com a Receita Federal. Portanto vou listar o passo-a-passo para conseguir trabalhar para uma empresa do exterior residindo no Brasil de maneira legal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Este artigo não se destina a meios de trabalho remoto através de empresas terceirizadoras, pois as mesmas normalmente possuem CNPJ no Brasil e vão decidir o seu regime de contratação.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sumário
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;#1: Contrato de trabalho&lt;/li&gt;
&lt;li&gt;#2: Abertura de Pessoa Jurídica&lt;/li&gt;
&lt;li&gt;#3: Como receber pagamentos?&lt;/li&gt;
&lt;li&gt;#4: Gerando uma Invoice em moeda estrangeira&lt;/li&gt;
&lt;li&gt;#5: Emissão de Nota Fiscal&lt;/li&gt;
&lt;li&gt;#6: (Opcional) Abertura de Conta Bancária Pessoa Jurídica&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  #1: Contrato de trabalho &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;É necessário firmar um contrato de trabalho com a empresa contratante. Este contrato conterá o quanto você recebe na moeda local (USD, EUR, GBP) e outras regras que ficarem definidas entre você e o empregador (férias, feriados, etc). Este contrato será muito importante para comprovar a origem dos recursos na sua conta bancária, caso a Receita Federal ou algum banco brasileiro solicite tal informação. Seu contratante provavelmente já possuirá um modelo de contrato pré-estabelecido, presumindo que você não será o primeiro a ser contratado pela organização.&lt;/p&gt;

&lt;h3&gt;
  
  
  #2: Abertura de Pessoa Jurídica &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A empresa do exterior muito provavelmente não possuirá uma entidade registrada no Brasil. Portanto, para receber será necessário abrir uma Pessoa Jurídica aqui, pois pagamentos do exterior devem ser feitos de empresa para empresa.&lt;br&gt;
Neste tópico não há muito segredo, o que eu recomendo é entrar em contato com algum escritório de Contabilidade da sua cidade no Brasil e explicar toda a situação, preferencialmente um escritório que possua experiência com emissão de notas fiscais para o exterior. Fique atento em relação ao código CNAE que escolherá para sua empresa, pois ele indicará se pode ou não enquadrar-se no Simples Nacional, simplificando e reduzindo os encargos. Além disto, defina o quanto quer colaborar com o INSS. Alinhe tudo isto com seu contador.&lt;br&gt;
Aqui em Belo Horizonte, por exemplo, a diferença básica foi a de que, por prestar serviço para o exterior, eu não pago ISS. Acredito que isto pode variar de município para município.&lt;br&gt;
Algumas startups oferecem esse tipo de serviço Online, como a Contabilizei. Nunca utilizei o serviço deles, portanto não se trata de uma recomendação. Fala aí nos comentários se é cliente deles e como tem sido a experiência.&lt;/p&gt;

&lt;h3&gt;
  
  
  #3: Como receber pagamentos? &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Neste tópico, a opção mais tradicional seria contatar seu banco e solicitar a eles um código internacional (IBAN, WIRE, SWIFT, dependendo do país do seu empregador). Não recomendo este processo pois bancos tradicionais cobram taxas abusivas e cada banco possui uma forma de aprovação para recebimento das transferências, como de costume, bem burocráticos.&lt;br&gt;
Do que nós Devs gostamos no setor bancário? Sim, Fintechs! Vou focar nestas. Falarei à respeito das duas plataformas que já utilizei. Uma delas utilizei por cerca de 3 anos (&lt;strong&gt;TransferWise&lt;/strong&gt;) e a outra utilizo há cerca de 5 meses (&lt;strong&gt;Remessa Online&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TransferWise&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TransferWise é uma empresa com sede em Londres de transferência de dinheiro on-line. Oferece ótimas taxas e uma seleção enorme de moedas disponíveis. Além de câmbio, eles também disponibilizam uma conta de múltiplas moedas, infelizmente até o momento dessa postagem (12/2020), não enviam seus cartões para esta conta a endereços do Brasil, porém os serviços de câmbio estão todos disponíveis em nosso território.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como receber através do TransferWise?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ao abrir uma conta no TransferWise, eles te disponibilizarão dados bancários para recebimento de dinheiro nesta conta. Se seu empregador for Europeu da zona do Euro, abra uma conta em Euro e envie o código IBAN ao seu empregador. Se for dos Estados Unidos, passe os dados bancários da conta como número da conta, número WIRE, etc.&lt;/li&gt;
&lt;li&gt;No momento de receber o pagamento, emita uma Invoice seguindo os passos descritos em Gerando uma Invoice em moeda estrangeira e encaminhe ao contratante. O TransferWise não irá te solicitar esta invoice.&lt;/li&gt;
&lt;li&gt;Seu empregador fará o depósito nesta conta bancária e neste momento você fará uma operação de câmbio na plataforma do TransferWise da sua conta do TW para uma conta bancária brasileira: não precisa ser conta de Pessoa Jurídica.&lt;/li&gt;
&lt;li&gt;Após recebimento do valor em Real Brasileiro na sua conta, siga os passos do tópico Emissão de Nota Fiscal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Vantagens do TransferWise:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Taxas baixas&lt;/li&gt;
&lt;li&gt;Agilidade para recebimento. Recebimentos em USD estão demorando cerca de 1 dia (2022). Na época que recebia em Euro (2020), girava em torno de 3 dias.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens do TransferWise:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não oferecem conta de PJ no Brasil. Isto não é um empecilho pois contabilmente não há problema em receber como Pessoa Física e depois emitir uma nota fiscal pela sua empresa.&lt;/li&gt;
&lt;li&gt;O Banco Rendimento, que faz a intermediação pelo TransferWise, pode em algum momento te solicitar documentação comprovando a origem destes recursos. Mas isto é simples, basta encaminhar o contrato de trabalho firmado, suas declarações de IR anteriores, documento de identificação, etc. Passei por esse processo e tive que aguardar cerca de uma semana para liberação do meu salário quando ocorrido.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Remessa Online&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Empresa brasileira fundada em 2016 com o objetivo de facilitar recebimento de remessas estrangeiras em diversas moedas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como receber através da Remessa Online?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abra uma conta de Pessoa Jurídica na Remessa Online, caso o limite da conta de Pessoa Física não seja suficiente. Abordaremos o processo de PJ aqui. O processo de abertura da conta em si é simples e existem diversos posts em blogs pela internet explicando como fazer, bem como vídeos no YouTube. Tenha em mãos o contrato estabelecido com seu contratante, pois a Remessa Online irá solicitar.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Remessa Online apenas transfere os recursos após operação de câmbio para o mesmo titular. Para PF, sua conta bancária deve estar no mesmo CPF, para PJ, no mesmo CNPJ. Portanto, é necessário abrir uma conta bancária PJ. Veja o que estou falando à respeito disso no tópico (Opcional) Abertura de Conta Bancária Pessoa Jurídica. Se optou por usar a Remessa Online PJ, este tópico não é opcional rsrs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Passe para seu contratante os dados bancários da sua conta da Remessa Online. Mesmo processo do TransferWise até aqui, IBAN para Europa, se não me engano WIRE para USA.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No momento de receber o pagamento, emita uma Invoice seguindo os passos descritos em Gerando uma Invoice em moeda estrangeira. Aqui vem uma diferença importante em relação ao TransferWise, a Remessa Online irá solicitar que faça o upload desta invoice todas as vezes que receber uma remessa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Após recebimento do valor em Real Brasileiro na sua conta, siga os passos do tópico Emissão de Nota Fiscal.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Vantagens da Remessa Online:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tudo feito pela conta de pessoa jurídica, processo bem transparente e sem surpresas.&lt;/li&gt;
&lt;li&gt;Também oferece uma conta de pessoa física, porém com limite baixo. Foi útil pra mim enquanto aguardava a abertura da minha conta bancária de PJ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens da Remessa Online:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Taxas um pouco mais altas do que do TransferWise. Porém, ao receber pelo menos uma remessa mensal, eles enviam um cupom de desconto no seu e-mail. Lembre-se sempre de aplicar este cupom, dessa forma as taxas ficam bem próximas do TransferWise.&lt;/li&gt;
&lt;li&gt;Necessidade de ter uma conta bancária PJ para recebimento das remessas na conta de PJ.&lt;/li&gt;
&lt;li&gt;No meu caso o processo todo tem demorado cerca de uma semana. Por fornecerem um código IBAN brasileiro, demora de 2 a 3 dias para cair na conta da Remessa Online e mais uns 2 dias para cair na minha conta bancária de PJ.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  #4: Gerando uma Invoice em moeda estrangeira &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A Invoice basicamente é a fatura. Nela você descreve os serviços prestados e o valor em moeda estrangeira.&lt;br&gt;
&lt;strong&gt;Invoice e Nota Fiscal são dois documentos distintos. Um não elimina o outro.&lt;/strong&gt;&lt;br&gt;
Eu recomendo a utilização do &lt;strong&gt;Invoice Ninja&lt;/strong&gt; (invoiceninja.com). É grátis e bem simples.&lt;br&gt;
Basta criar uma conta, preencher os dados do seu contratante e da sua empresa, criar uma nova invoice, gerar o PDF e encaminhar ao seu empregador. Esta mesma invoice poderá ser utilizada para comprovar a origem dos recursos caso receba o pagamento através da Remessa Online.&lt;/p&gt;

&lt;h3&gt;
  
  
  #5: Emissão de Nota Fiscal &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Nos passos anteriores expliquei que fechei contrato com um escritório de Contabilidade daqui de Belo Horizonte, certo? No momento da abertura da minha empresa, assinei diversas procurações, fui ao cartório inúmeras vezes, na Receita Federal e etc, com o objetivo de dar plenos poderes a eles para assinarem digitalmente documentos por mim. Portanto, não possuo certificado digital.&lt;br&gt;
Dado este contexto, sempre que preciso de uma nota fiscal, encaminho para a Contabilidade um e-mail contendo os seguintes dados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valor exato em R$ que caiu na minha conta. Lembre-se: para a receita o que importa é o valor em Real.&lt;/li&gt;
&lt;li&gt;Data do recebimento (na conta bancária no Brasil).&lt;/li&gt;
&lt;li&gt;Nome do meu contratante e endereço da empresa na Irlanda.&lt;/li&gt;
&lt;li&gt;Sempre incluo um lembrete de que o meu cliente não está localizado no Brasil, então portanto não há cobrança de ISS. Novamente, verifique com sua Contabilidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  #6: (Opcional) Abertura de Conta Bancária Pessoa Jurídica &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Se o seu faturamento for superior a 80 mil reais anuais, sua PJ não será MEI, provavelmente será uma Microempresa (ME).&lt;br&gt;
No momento que escrevi este artigo, houve uma grande dificuldade para encontrar conta PJ gratuita para empresas que não fossem MEI.&lt;br&gt;
Porém, hoje, já é possível abrir contas PJ gratuitas no Inter, Nubank e Conta Simples.&lt;br&gt;
As taxas de manutenção dos bancos tradicionais variam de 50 a 140 reais, além da burocracia que não me agrada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pronto!&lt;/strong&gt; Espero ter ajudado e esclarecido este processo. Se tiver alguma dúvida ou sugestão, deixe aí nos comentários.&lt;/p&gt;

</description>
      <category>career</category>
      <category>devlife</category>
      <category>remote</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
