【发布时间】:2014-02-06 15:06:03
【问题描述】:
我正在使用
VS2013 MVC5, 简单注射器 2.4.1 MvcSiteMapProvider.MVC5.DI.SimpleInjector.Modules 4.4.10
在容器上调用“验证”时出现以下错误
附加信息:配置无效。为类型
IAttributeAssemblyProvider创建实例失败。IAttributeAssemblyProvider类型的注册委托引发了异常。AttributeAssemblyProvider类型的构造函数包含未注册的名称为“includeAssemblies”的IEnumerable<String>类型参数。请确保IEnumerable<String>已在容器中注册,或更改AttributeAssemblyProvider的构造函数。
它引用的数组是:
string[] includeAssembliesForScan = new string[] { "MyProject" };
这似乎是罪魁祸首:
container.RegisterSingle<ReflectionSiteMapNodeProvider>(() =>
container.GetInstance<ReflectionSiteMapNodeProviderFactory>()
.Create(includeAssembliesForScan));
create 方法的签名是:
public MvcSiteMapProvider.Builder.ReflectionSiteMapNodeProvider Create(System.Collections.Generic.IEnumerable<string> includeAssemblies)
Member of MvcSiteMapProvider.Builder.ReflectionSiteMapNodeProviderFactory
我认为 IAttributeAssemblyProvider 正在按照以下方式注册
// Single implementations of interface with matching name (minus the "I").
CommonConventions.RegisterDefaultConventions(
(interfaceType, implementationType) => container.RegisterSingle(interfaceType, implementationType),
new Assembly[] { siteMapProviderAssembly },
allAssemblies,
excludeTypes,
string.Empty);
因为:
public class AttributeAssemblyProvider : IAttributeAssemblyProvider
而 ctor 是:
public AttributeAssemblyProvider(
IEnumerable<string> includeAssemblies,
IEnumerable<string> excludeAssemblies)
{...}
提前感谢您的帮助
堆栈跟踪是:
在 SimpleInjector.InstanceProducer.VerifyExpressionBuilding() 在 SimpleInjector.Container.VerifyIfAllExpressionsCanBeBuilt(InstanceProducer[] 生产者ToVerify)在 SimpleInjector.Container.VerifyIfAllExpressionsCanBeBuilt() 在 SimpleInjector.Container.Verify() 在 MyProject.App_Start.SimpleInjectorInitializer.Intialise() 在 \App_Start\SimpleInjectorInitializer.cs:第 54 行 \Global.asax.cs:line 中的 MyProject.MvcApplication.Application_Start() 16
【问题讨论】:
-
IAttributeAssemblyProvider的注册是什么样的? -
我找不到 IAttributeAssemblyProvider 容器的显式注册,如果这就是你的意思的话。我刚刚从 MvcSitemapProvider Simpleinjector NuGet 中获取了默认代码。
-
查看源代码中该软件包的作用。它可能正在注册。
-
堆栈跟踪是什么?
-
希望获得堆栈跟踪.. 同时,刚刚意识到 CommonConventions.RegisterDefaultConventions 不是您的,抱歉
标签: c# asp.net-mvc dependency-injection simple-injector mvcsitemapprovider