StructureMap: Как предоставить System.Web.HttpRequestBase для метода? - PullRequest
1 голос
/ 02 марта 2011

Я пытаюсь реализовать оболочку для файлов cookie, как описано здесь:

http://chwe.at/blog/post/2009/01/28/Testable-and-reusable-cookie-access-with-ASPNet-MVC-RC.aspx

Но StructureMap завершается с ошибкой:

StructureMap Exception Code:  202
No Default Instance defined for PluginFamily System.Web.HttpRequestBase,
System.Web.Abstractions, Version=3.5.0.0, Culture=neutral,     
PublicKeyToken=31bf3856ad364e35

Я думаю, это потому, что я пытаюсь заставить StructureMap предоставить параметры для следующего метода:

    public CookieContainer(HttpRequestBase request, HttpResponseBase response)
    {
        Check.IsNotNull(request, "request");
        Check.IsNotNull(response, "response");

        _request = request;
        _response = response;
    }

Я попытался добавить следующее в реестр StructureMap:

        ForRequestedType<HttpRequestBase>()
            .TheDefaultIsConcreteType<HttpRequestBase>();

        ForRequestedType<HttpResponseBase>()
            .TheDefaultIsConcreteType<HttpResponseBase>();

но это не с ошибкой:

StructureMap Exception Code:  180
StructureMap cannot construct objects of Class System.Web.HttpRequestBase, 
System.Web.Abstractions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35 because there is no public constructor found. 

Как я могу получить StructureMap для предоставления HttpRequestBase и HttpResponseBase объектов для метода?

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Это потому, что HttpRequestBase является абстрактным и SM ничего не может с этим поделать.

Используйте фабричный метод

ForRequestedType<HttpRequestBase>().TheDefault.Is
  .ConstructedBy(() => HttpContext.Request);
0 голосов
/ 02 марта 2011

Оказывается, мне не нужен перегруженный конструктор ... поэтому все, что мне нужно было сделать, это удалить это:

public CookieContainer(HttpRequestBase request, HttpResponseBase response)
{
    Check.IsNotNull(request, "request");
    Check.IsNotNull(response, "response");

    _request = request;
    _response = response;
}

Этот конструктор используется только для создания контейнера фиктивных файлов cookie, в который выпройти макет HttpRequestBase и HttpResponseBase объектов.

...