gpt4 book ai didi

asp.net-mvc - 未注册默认实例且无法自动确定类型

转载 作者:行者123 更新时间:2023-12-04 16:59:47 25 4
gpt4 key购买 nike

我的接口(interface)定义如下:

public interface IApplicationSettings
{
string LoggerName { get; }
string NumberOfResultsPerPage { get; }
string EmailAddress { get; }
string Credential { get; }
}

该接口(interface)的实现如下:
public class WebConfigApplicationSettings : IApplicationSettings
{
public string LoggerName
{
get { return ConfigurationManager.AppSettings["LoggerName"]; }
}

public string NumberOfResultsPerPage
{
get { return ConfigurationManager.AppSettings["NumberOfResultsPerPage"]; }
}

public string EmailAddress
{
get { return ConfigurationManager.AppSettings["EmailAddress"]; }
}

public string Credential
{
get { return ConfigurationManager.AppSettings["Credential"]; }
}
}

我还创建了一个工厂类来获取WebConfigSettings具体实现的实例如下:
public class ApplicationSettingsFactory
{
private static IApplicationSettings _applicationSettings;

public static void InitializeApplicationSettingsFactory(
IApplicationSettings applicationSettings)
{
_applicationSettings = applicationSettings;
}

public static IApplicationSettings GetApplicationSettings()
{
return _applicationSettings;
}
}

然后我解决了依赖关系如下:
public class DefaultRegistry : Registry {

public DefaultRegistry() {
Scan(
scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.With(new ControllerConvention());
});


For<IApplicationSettings>().Use<WebConfigApplicationSettings>();

ApplicationSettingsFactory.InitializeApplicationSettingsFactory
(ObjectFactory.GetInstance<IApplicationSettings>());

}
}

现在,当我运行我的应用程序时,它会抛出以下异常:
Exception has been thrown by the target of an invocation.

内部异常是
No default Instance is registered and cannot be automatically determined for type 'Shoppingcart.Infrastructure.Configuration.IApplicationSettings'\r\n\r\nThere is no configuration specified for Shoppingcart.Infrastructure.Configuration.IApplicationSettings\r\n\r\n1.) Container.GetInstance(Shoppingcart.Infrastructure.Configuration.IApplicationSettings)\r\n

我正在为 MVC5 使用 StructureMap

最佳答案

您的代码不起作用的原因是因为当您拨打 ObjectFactory.GetInstance<IApplicationSettings>() 时,您的注册表尚未注册,因此 StructureMap 的配置不完整。

我相信您要做的是以下内容(经过测试并有效):

public class ApplicationSettingsFactory
{
public ApplicationSettingsFactory(WebConfigApplicationSettings applicationSettings)
{
_applicationSettings = applicationSettings;
}

private static IApplicationSettings _applicationSettings;

public IApplicationSettings GetApplicationSettings()
{
return _applicationSettings;
}
}

您的注册表配置如下:
public DefaultRegistry() {

Scan(scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.With(new ControllerConvention());
});

this.For<IApplicationSettings>().Use(ctx => ctx.GetInstance<ApplicationSettingsFactory>().GetApplicationSettings());

}

关于asp.net-mvc - 未注册默认实例且无法自动确定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com