Pet*_*ter 21 c# structuremap asp.net
我是StructureMap的新手.我已下载并使用的是2.6.1.0版.我一直收到以下错误:
StructureMap异常代码:202没有为PluginFamily Company.ProjectCore.Con.IConfiguration,Company.ProjectCore,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null定义的默认实例
我的Global.asax.cs看起来像:
protected void Application_Start(object sender, EventArgs e)
{
var container = new Container(x =>
{
x.For<ICache>().Use<Cache>();
x.For<IEmailService>().Use<EmailService>();
x.For<IUserSession>().Use<UserSession>();
x.For<IRedirector>().Use<Redirector>();
x.For<INavigation>().Use<Navigation>();
});
container.AssertConfigurationIsValid();
}
Run Code Online (Sandbox Code Playgroud)
我从ObjectFactory.Initialize更改为"new Container"进行调试.当单步执行AssertConfigurationIsValid()方法时,Cache可以工作,但EmailService在以下行中的GetInstance方法失败:
[Pluggable("Default")]
public class EmailService : IEmailService
private readonly IConfiguration _configuration;
public EmailService()
{
_configuration = ObjectFactory.GetInstance<IConfiguration>();
}
Run Code Online (Sandbox Code Playgroud)
如果我删除IEmailService,IUserSession会抛出相同的202错误.
我应该在Application_Start或我的类文件中添加其他内容吗?
提前致谢...
Pet*_*ter 21
此问题已修复更换ObjectFactory.Initialize
与ObjectFactory.Configure
和添加在我的项目的组件:
ObjectFactory.Configure(x =>
{
x.Scan(scan =>
{
scan.LookForRegistries();
scan.Assembly("MyAssembly");
scan.Assembly("MyAssembly");
});
});
Run Code Online (Sandbox Code Playgroud)
小智 12
我得到了相同的错误消息,但原因不同.我有一个类Foo定义了两个构造函数,如下所示:
public class Foo : IFoo
{
private Bar _bar;
public Foo()
{
_bar = new Bar();
}
public Foo(Bar bar)
{
_bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
我的StructureMap配置是这样的:
For<IFoo>.Use<Foo>();
Run Code Online (Sandbox Code Playgroud)
我一直收到一条错误信息
202没有为Bar定义默认实例
问题是StructureMap试图使用带参数的构造函数构造一个Foo,而不是使用无参数的默认构造函数.我使用如何使用StructureMap通过代码定义默认构造函数中的答案解决了它?像这样:
For<IFoo>.Use(() => new Foo());
Run Code Online (Sandbox Code Playgroud)
IConfiguration具体类的引导位置在哪里?
即:
x.For<IConfiguration>().Use<Configuration>();
Run Code Online (Sandbox Code Playgroud)