Этот вопрос относится к моему другому сообщению .
Итак, немного повозившись, я решил сделать это таким образом. Что, кажется, работает нормально, когда я запускаю его, хотя я получаю следующую ошибку в NUnit: не удалось загрузить файл или сборку «Castle.Core, версия = 1.0.3.0, культура = нейтральная, PublicKeyToken = 407dd0808d44fbdc» или один из его зависимости. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Так что не знаете, что там происходит???
Просто хотел узнать, что другие думают о дизайне и есть ли какие-то очевидные «нет-нет» или улучшения. т.е. Является ли конструктор базового обработчика хорошим местом для создания экземпляра компонента Windsor или есть лучшее место для этого? Как я уже говорил в исходном посте, идея такого подхода заключалась в том, чтобы компоненты были хорошо отделены друг от друга и чтобы упростить модульное тестирование. Я также должен добавить, что я новичок в модульном тестировании, издеваясь. Спасибо!
public abstract class BaseHttpHandler : IHttpHandler
{
private HttpContext _httpContext;
private ILogger _logger;
private IDataRepository _dataRepository;
protected HttpRequest Request { get { return _httpContext.Request; } }
protected HttpResponse Response { get { return _httpContext.Response; } }
protected bool IsRequestFromUAD { get { return Request.UserAgent == null ? false : Request.UserAgent.Equals("UAD"); } }
protected ILogger Logger { get { return _logger; } }
protected IDataRepository DataRepository { get { return _dataRepository; } }
public virtual bool IsReusable { get { return false; } }
public BaseHttpHandler()
{
var container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
_logger = container.Resolve<ILogger>();
_dataRepository = container.Resolve<IDataRepository>();
}
public void ProcessRequest(HttpContext context)
{
_httpContext = context;
ProcessRequest(new HttpContextWrapper(context));
}
public abstract void ProcessRequest(HttpContextBase context);
}
public class UADRecordHttpHandler : BaseHttpHandler
{
public override void ProcessRequest(HttpContextBase context)
{
if (IsRequestFromUAD)
{
using (var reader = new StreamReader(context.Request.InputStream))
{
string data = reader.ReadToEnd();
if (Logger != null)
Logger.Log(data);
if(DataRepository != null)
DataRepository.Write(data);
context.Response.Write(data);
}
}
else
ReturnResponse(HttpStatusCode.BadRequest);
}
}