Я просто смотрю на проект, и я вижу что-то работающее, которое, как я думал, не должно работать.Почему это пространство имен правильно разрешено?
Если посмотреть на фрагмент ниже я нахожусь в пространстве имен CustomFields.DateTimeField.Drivers
, и только другие using
заявления в этом файле и другие пространства имен нижеCustomFields.DateTimeField
.
Но если вы посмотрите на строку public class DateTimeFieldDriver
, то используется тип Fields.DateTimeField
.
Глядя на определение DateTimeField
thats в пространстве имен CustomFields.DateTimeField.Fields
, но я только установил для своих сестринских пространств имена.
Итак, вопрос двоякий - почему это работает? это считается плохой практикой?
сниппета в вопросе:
using System;
using JetBrains.Annotations;
using Orchard;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.Localization;
using CustomFields.DateTimeField.Settings;
using CustomFields.DateTimeField.ViewModels;
namespace CustomFields.DateTimeField.Drivers {
[UsedImplicitly]
public class DateTimeFieldDriver : ContentFieldDriver<Fields.DateTimeField> {
public IOrchardServices Services { get; set; }
private const string TemplateName = "Fields/Custom.DateTime"; // EditorTemplates/Fields/Custom.DateTime.cshtml
public DateTimeFieldDriver(IOrchardServices services) {
Services = services;
T = NullLocalizer.Instance;
}
Проект может быть downloaded here, если вы хотите, чтобы исследовать его (MVC2 проекта).
Возможно, вам стоит проверить, что MSDN может сказать по этому вопросу? Я бы предположил, что для разрешения пространства имен используется какой-то каскадный поиск. Я бы не сказал, что это плохая практика, но наличие класса с тем же именем, что и родительское пространство имен ('DateTimeField'), безусловно, считается не очень хорошим/безопасным для проверки дома. – Leandro