Ваш вопрос немного сложен для понимания.Я думаю, что вы хотите записать имя класса или метода экземпляра ...
Если вы хотите строгую типизацию, я думаю, вам нужно использовать рефлексию.Конечно, вы можете добавить строковое имя к каждому классу, который может быть зарегистрирован, но это хрупкий код, и кто-то позже возненавидит вас за это.Вы видите этот стиль в языках, которые не всегда легко поддерживают рефлексию, но я бы рекомендовал против этого на языке, подобном C #.
Итак, решение: вызывается ли ваш метод регистрации изнутри экземпляра?Если это так, мы можем использовать отражение, чтобы получить имя вызывающего метода и много другой информации.
Если да, то что-то вроде этого может работать для вас:
class MyRequest: IRequest {
// other interface implementation details omitted
public void SetProfiles(Profile p) {
if(HasUglyPicture(p)) {
MyLogger.LogError(String.Format(
"User {0} update attempted with ugly picture", p.UserName)
throw new Exception("Profile update failed due to ugly picture!");
}
}
class MyLogger : ILogger {
// other logger details omitted
public void LogError(string errorMsg) {
// here's where you get the method name
// http://www.csharp-examples.net/reflection-calling-method-name/
StackTrace stackTrace = new StackTrace();
MyLogOutputStream.Write(stackTrace.GetFrame(1).GetMethod().Name);
MyLogOutputStream.WriteLine(errorMsg);
}
}
Этот стекВопрос переполнения может помочь: Как я могу получить методы вызова в C #
На этом веб-сайте есть фрагмент кода, на котором основаны две важные строки: http://www.csharp -примеры.сеть / отражательный вызов-метод-имя /