首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StructureMap找不到HttpServerUtility的默认实例

StructureMap找不到HttpServerUtility的默认实例
EN

Stack Overflow用户
提问于 2010-09-07 09:12:54
回答 1查看 812关注 0票数 0

我有一个依赖于HttpServerUtilityBase的类,我的计划是让结构映射使用HttpServerUtilityWrapper作为默认实例。那里没什么奇怪的。但是,一旦我将声明添加到我的注册表中,structuremap就无法解析实例,并得到一个202错误。

这是我的注册表:

代码语言:javascript
复制
public class ApplicationRegistry : Registry
{
    public ApplicationRegistry()
    {
        Scan(scanThe =>
        {
            scanThe.AssembliesFromApplicationBaseDirectory();
            scanThe.WithDefaultConventions();
        });

        Scan(scanThe =>
        {
            scanThe.AssemblyContainingType<HttpServerUtilityBase>();
        });

        SetAllProperties(x =>
        {
            x.WithAnyTypeFromNamespaceContainingType<IFinancialYearRepository>();
            x.WithAnyTypeFromNamespaceContainingType<IUserManagementFacade>();
            x.WithAnyTypeFromNamespaceContainingType<IBulkTypeImporter>();
            x.OfType<ILog>();
            x.OfType<ISessionManager>();
        });

        For<IUnitOfWork>()
            .HttpContextScoped()
            .Use(() => new EFUnitOfWork(
                    ConfigurationManager.ConnectionStrings["PublishedEFSqlServer"].ConnectionString
                    )).Named("publishedUnitOfWork");

        For<IUnitOfWork>()
            .HttpContextScoped()
            .Use(() => new EFUnitOfWork(
                ConfigurationManager.ConnectionStrings["UnpublishedEFSqlServer"].ConnectionString
                )).Named("unpublishedUnitOfWork");

        For<ILog>()
            .AlwaysUnique()
            .Use(s =>
            {
                ILog loggger;
                if (s.ParentType == null)
                {
                    loggger = LogManager.GetLogger(s.BuildStack.Current.ConcreteType);
                }
                else
                {
                    loggger = LogManager.GetLogger(s.ParentType);
                }

                if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
                {
                    ThreadContext.Properties["user"] = HttpContext.Current.User.Identity.Name;
                }
                return loggger;
            });

        For<ISessionManager>().Singleton();

        For<HttpServerUtilityBase>()
            .Singleton()
            .Use<HttpServerUtilityWrapper>();
    }
}

在我看来一切都很好,但很明显我错过了什么。另外,调用WhatDoIHave() (引用HttpServerUtilityBase )生成的行似乎有一个对HttpServerUtilityWrapper的引用,所以我认为它应该能正常工作。

HttpServerUtilityBase (System.Web.HttpServerUtilityBase) 3bf840df-e159-4 4dcf 93ef-211bb7484698配置的System.Web.HttpServerUtilityWrapper、System.Web、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a的配置实例

范围为: Singleton

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-07 09:28:02

结果发现修复方法很简单。我需要为HttpServerUtilityWrapper指定构造函数参数

代码语言:javascript
复制
For<HttpServerUtilityBase>()
    .Singleton()
    .Use<HttpServerUtilityWrapper>()
    .Ctor<HttpServerUtility>().Is(HttpContext.Current.Server);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3657308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档