admax
- Вопросы
- Ответы
Имя | Евгений |
Возраст | Неизвестно |
Сайт | Неизвестно |
@codehelper_ru | |
Участвует в проекте | 1117 дн., 17 час., 54 мин. |
Последняя активность | 418 дн., 10 час., 24 мин. назад |
Ответы
Перейти к вопросу →
Когда нужно привести объект к какому-то типу только чтобы вызвать один метод, очень раздражает синтаксис cast`а — слишком много скобочек приходится набирать и конструкция не очень читабельна:
((SomeType) target).DoWork();
В этом случае спасет такой простой extension:
public static T As<T>(this object @object)
{
return (T) @object;
}
Теперь можно писать так:
target.As<SomeType>().DoWork();
Перейти к вопросу →
- Установить нужное значение свойства
AutoCompleteMode
(например,SuggestAppend
илиAppend
); - Установить значение свойства
AutoCompleteSource
вCustomSource
; - Заполнить строками коллекцию
AutoCompleteCustomSource
(обычная коллекция, можно заполнить из дизайнера или из кода).
Перейти к вопросу →
Нужно создать объект RequestContext
, используя обертку (HttpContextWrapper
) над объектом HttpContext
. Сам объект HttpContext
получается через статические методы (старый добрый ASP.NET). Созданный requestContext
передается в конструктор класса UrlHelper
.
private static UrlHelper Url()
{
var httpContext = new HttpContextWrapper(HttpContext.Current);
var requestContext = new RequestContext(httpContext, new RouteData());
return new UrlHelper(requestContext);
}
Перейти к вопросу →
Есть такой вариант — LOG4VIEW. Особенности:
- Гламурный интерфейс с темами аля MS Office 2007 (не знаю плюс это или минус);
- Отображение лога не в виде текста, а в виде таблицы;
- Несмотря на гламурность, имеется бесплатная версия;
- Очень приятная фича — если в логе есть «провал» во времени (в какой-то промежуток ничего не писалось), то он визуально отображается в таблице.
Перейти к вопросу →
Вот класс-фильтр, который перекидывает пользователя на страницу авторизации если он зашел не с локального компьютера:
using System.Web.Mvc;
public class AcceptLocalUserAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
var isLocalRequest = filterContext.RequestContext.HttpContext.Request.IsLocal;
if (!isLocalRequest)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
}
Перейти к вопросу →
Нужно использовать метод ConfigureObject контекста. Например так:
ContextRegistry.GetContext().ConfigureObject(targetObject, objectName);
Где targetObject
— объект, кторый нужно сконфигурировать; objectName
— имя прототипа этого объекта в контейнере.
Перейти к вопросу →
Есть такой интересный вариант:
<form method="LINK" action="http://codehelper.ru">
<input type="submit" value="Go to CodeHelper!">
</form>
Здесь объявляется форма, action которой указывает на страницу редиректа. При нажатии на кнопку происходит переход на заданную страницу. Интересная особенность метода — тут вообще не используется javascript.
Перейти к вопросу →
Есть такие рекомендации для интерфейсов:
Обычно интерфейс содержит больше одного метода. Операции внутри интерфейса должны быть семантически связаны. Большое количество интерфейсов с малым числом методов говорит о не правильной детализации. Наоборот, очень малое число интерфейсов (или один интерфейс) с очень большим числом методов также говорит о не правильной грануляции.
В общем, количество методов интерфейса скорее зависит от контекста, то есть от того, сколько всего сервисов в проекте, какие задачи они решают и тд
Перейти к вопросу →
Вот перевод документации:
Callback
Callback
— это метод, позволяющий пользователю определить делегат, который будет вызываться каждый раз при проверке взова метода на «ожидаемость». Это полезно, когда нужно провести сложную проверку параметров метода или когда параметры метода должны как-то взаимодействовать с контекстом теста.
То что нужно иметь в виду при использовании callback
:
- Делегат, который передается в метод
callback
, должен возвращатьbool
—true
если аргументы метода прошли валидацию. Если же валидация не пройдена, вернитеfalse
и Rhino Mocks отметит, что вызов метода не считается ожидаемым. - Тесты, использующие
callback
, легко могут стать трудночитаемыми. Поэтому пользуйтесь колбеками только в случае необходимости. - Делегаты
callback
могут (и, скорее всего, будут) вызваны несколько раз; имейте это в виду, когда пишете их код. Оберните необходимые действия вif ( firstTimeCalled ) { /*do work*/ }
или другим способом убедитесь, что повторный вызов не будет иметь побочных эффектов.
Технические детали — чтобы callback
считался вызвался корректно нужно чтобы он возвращал bool
и принимал те же параметры, что и исходный метод. Для регистрации делегата используется код:
IProjectRepository repository = mocks.CreateMock<IProjectRepository>();
IProjectView view = mocks.CreateMock<IProjectView>();
Expect.Call(view.Ask(null,null)).Callback(new AskDelegate(DemoAskDelegateMethod)).Return(null);
Имейте в виду — внутри колбека нельзя изменить возвращаемое значение метода, поэтому нужно указать его явно (используя Return(...)
)
Do
Иногда бывает, что возврат статичного значения из заглушки неприемлемо для сценария тестирования. Для таких случаев используется метод Do
чтобы добавить собственную логику генерации возвращаемого значения. Значение, возвращаемое делегатом метода Do
будет считаться возвращаемым значением метода (любые исключения также также учитываются). Сигнатура делегата должна совпадать с сигнатурой исходного метода.
Обработчик Do
вызывается только если соответствующий метод вызван. И он вызывается только один раз для этого метода. В этом отличие от Callback()
Перейти к вопросу →
Вот простейший пример:
Assembly assembly = Assembly.GetAssembly(typeof(SomeType));
Version version = assembly.GetName().Version;
Объект класса Version хранит информацию о составляющих параметрах версии.