asp.net-mvc – 没有注册默认实例,无法自动确定类型

我的界面定义如下:

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());

}

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....