Bug Report T803744
Visible to All Users

Templates – A template does not include Generic types in the class substitution

created 6 years ago

I have created a log template to quickly add a static contextual logger at the top of my classes:
private static ILogger _logger = Log.ForContext<«Class»>();
Context: [InClass]
The problem is if I use it within a generic class it does not correctly substitute the class name, it excludes the generic part
e.g.

C#
public class MyGenericClass<TInner> { private static ILogger _logger = Log.ForContext<MyGenericClass>(); }

when it should be

C#
public class MyGenericClass<TInner> { private static ILogger _logger = Log.ForContext<MyGenericClass<TInner>>(); }

I've also tried «TypeName» with same result
I'm using VS2019 Enterprise 16.2

Comments (1)
DevExpress Support Team 6 years ago

    Hi,

    Thank you for reaching out to us.
    I managed to reproduce the described behavior and forwarded this thread to our R&D team for further research. We'll reply here once we have any results.

    Answers approved by DevExpress Support

    created 6 years ago

    We have fixed the issue described in this ticket and will include the fix in our next maintenance update. To apply this solution before the official update, request a hotfix by clicking the corresponding link for product versions you require.

    Note: Hotfixes may be unavailable for beta versions and updates that are about to be released.

      created 6 years ago

      Hi,

      We have fixed the issue. The «TypeName», «Class» and «FullTypeName» string providers can be parameterized by a boolean value that represents whether it needs to include a list of type arguments. To complete this, change the template definitions as follows:

      C#
      private static ILogger _logger = Log.ForContext<«Class(true)»>();

      I've created the gif to illustrate this template expansion.
      generic-class-template.gif

      You can find the updated build in the attachment.

        Disclaimer: The information provided on DevExpress.com and affiliated web properties (including the DevExpress Support Center) is provided "as is" without warranty of any kind. Developer Express Inc disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.

        Confidential Information: Developer Express Inc does not wish to receive, will not act to procure, nor will it solicit, confidential or proprietary materials and information from you through the DevExpress Support Center or its web properties. Any and all materials or information divulged during chats, email communications, online discussions, Support Center tickets, or made available to Developer Express Inc in any manner will be deemed NOT to be confidential by Developer Express Inc. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.