【发布时间】:2010-09-07 09:12:54
【问题描述】:
我有一个依赖于HttpServerUtilityBase 的类,我的计划是让结构映射使用HttpServerUtilityWrapper 作为默认实例。那里没什么奇怪的。但是,一旦我将声明添加到我的注册表中,structuremap 就无法解析该实例并且我收到 202 错误。
这是我的注册表:
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-4dcf-93ef-211bb7484698 System.Web.HttpServerUtilityWrapper 的配置实例,System.Web,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a
作用域为:单例
我错过了什么?
【问题讨论】:
-
仅供参考 - 您不需要扫描包含 HttpServerUtilityBase 的程序集。按照约定,扫描仅用于注册类型。在这种情况下,您显式注册了 HttpServerUtiltityBase 类型,因此约定扫描不会给您带来任何好处。
标签: c# structuremap ioc-container