Это может быть неосведомленным вопросом, но я не уверен, почему я не могу использовать искажение пространства имен и дополнительные методы вместе.
Следующий пример работает просто великолепно:
Program.cs
using System;
using ExtensionMethodTest.Domain;
namespace ExtensionMethodTest
{
class Program
{
static void Main(string[] args)
{
var m = new Domain.MyClass();
var result = m.UpperCaseName();
}
}
}
MyClass.cs
using System;
namespace ExtensionMethodTest.Domain
{
public class MyClass
{
public string Name { get; set; }
}
}
MyClassExtensions.cs
using System;
namespace ExtensionMethodTest.Domain
{
public static class MyClassExtensions
{
public static string UpperCaseName (this MyClass myClass)
{
return myClass.Name.ToUpper();
}
}
}
Однако, когда я искажаю домен следующим образом в Program.cs:
using Domain = ExtensionMethodTest.Domain;
Дополнительный метод больше не работает..
Это может быть довольно печально, когда я имею дело с преобразованием различных объектов области для заключения контракта объектов (скажем, у меня есть 4 доменных блока и 4 блока контракта) для использования в веб-сервисе. Используя искажение было бы очень удобно, поскольку я мог исказить следующим образом и продолжить использовать различные дополнительные методы (такие как ToContract, и т.д.):
using BillingContracts = Namespace.Billing.Contracts;
using IssuingContracts = Namespace.Issuing.Contracts;
и т.д...
Я с нетерпением жду ответа.. Я уверен, что это является прямым, но я, ни за что в жизни, не могу выяснить, почему это не работает.
Спасибо!
Обязательно добавьте несглаженный оператор using:
Program.cs
using System;
using ExtensionMethodTest.Domain; //DON'T FORGET A NON-ALIASED USING
using MyDomain = ExtensionMethodTest.Domain;
namespace ExtensionMethodTest
{
class Program
{
static void Main(string[] args)
{
var m = new MyDomain.MyClass();
var result = m.UpperCaseName();
}
}
}
MyClass.cs
using System;
namespace ExtensionMethodTest.Domain
{
public class MyClass
{
public string Name { get; set; }
}
}
MyClassExtensions.cs
using System;
namespace ExtensionMethodTest.Domain
{
public static class MyClassExtensions
{
public static string UpperCaseName (this MyClass myClass)
{
return myClass.Name.ToUpper();
}
}
}