我的界面定义如下:
public interface IApplicationSettings { string LoggerName { get; } string NumberOfResultsPerPage { get; } string EmailAddress { get; } string Credential { get; } }
该接口的实现如下:
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
我正在使用StructureMap for MVC5
解决方法
您的代码无法工作的原因是因为当您调用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()); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。