在c#控制台应用程序中设置结构映射
我得到了这个错误:在c#控制台应用程序中设置结构映射,c#,ioc-container,structuremap,C#,Ioc Container,Structuremap,我得到了这个错误: StructureMap Exception Code: 202 No Default Instance defined for PluginFamily 我的设置如下所示: Console.WriteLine("Structure Map"); SetupSM sm = new SetupSM(); sm.Setup(); ISomeThing someThing = ObjectFactory.GetInstance<ISomeThing>(); Co
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily
我的设置如下所示:
Console.WriteLine("Structure Map");
SetupSM sm = new SetupSM();
sm.Setup();
ISomeThing someThing = ObjectFactory.GetInstance<ISomeThing>();
Console.WriteLine("something.HowManyTHings: " + someThing.HowManyThings("asdf"));
public class SetupSM
{
public void Setup()
{
var c1 = new Container(config =>
{
config.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
});
var c2 = new Container(x =>
{
x.For<ISomeThing>().Use<SomeThingOne>();
});
}
}
Console.WriteLine(“结构图”);
SetupSM sm=新SetupSM();
sm.Setup();
ISomeThing someThing=ObjectFactory.GetInstance();
Console.WriteLine(“something.HowManyTHings:+something.HowManyTHings(“asdf”);
公共类设置
{
公共作废设置()
{
var c1=新容器(配置=>
{
config.Scan(扫描=>
{
扫描。卡入总成();
scan.WithDefaultConventions();
});
});
var c2=新容器(x=>
{
x、 For().Use();
});
}
}
这是我第一次尝试使用结构图,我缺少什么?
他们的主网站上的指南似乎很旧,使用了旧的语法等。尝试将配置应用于静态ObjectFactory,而不是将容器分开,您似乎会立即扔掉
public class SetupSM
{
public void Setup()
{
ObjectFactory.Configure(config =>
{
config.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
config.For<ISomething>().Use<SomeThingOne>();
});
}
公共类设置SM
{
公共作废设置()
{
ObjectFactory.Configure(配置=>
{
config.Scan(扫描=>
{
扫描。卡入总成();
scan.WithDefaultConventions();
});
config.For().Use();
});
}
公共静态类StructureMapBootStrapper
{
公共静态无效引导()
{
StructureMap.ObjectFactory.Initialize(
引导程序=>
{
引导程序.For().Use();
});
}
}
您的控制台应用程序:
Console.WriteLine("Structure Map");
StructureMapBootStrapper.BootStrap();
ISomeThing someThing = ObjectFactory.GetInstance<ISomeThing>();
Console.WriteLine("something.HowManyTHings: " + someThing.HowManyThings("asdf"));
Console.WriteLine(“结构图”);
StructureMapBootStrapper.BootStrap();
ISomeThing someThing=ObjectFactory.GetInstance();
Console.WriteLine(“something.HowManyTHings:+something.HowManyTHings(“asdf”);
前面的答案适用于StructureMap 2或3,但在StructureMap 4中,语法已更改。您可以在此处看到完整的解决方案:
实际上,ObjectFactory已被容器实例替换。您还可以选择在单独的注册表实例中执行配置,这是推荐的。因此,Main()中的初始化代码变为:
static void Main(字符串[]args)
{
var container=container.For();
var app=container.GetInstance并遵循.Combined,这使得您的应用程序非常可组合和可测试。“他们的主网站上的指南似乎非常陈旧,使用了旧语法等。”StructureMap在这方面有点臭名昭著。您使用ObjectFactory获取实例,但配置了两个完全独立的容器。请尝试使用ObjectFactory.ConfigUranks!因此在web应用程序中,我只需调用Setup()在我的应用程序中,在global.asax文件中开始请求?那么应用程序
类呢?我们从容器中获取它,但从不显式注册它。它的注册是否由StructureMap的“默认约定”处理?
Console.WriteLine("Structure Map");
StructureMapBootStrapper.BootStrap();
ISomeThing someThing = ObjectFactory.GetInstance<ISomeThing>();
Console.WriteLine("something.HowManyTHings: " + someThing.HowManyThings("asdf"));
static void Main(string[] args)
{
var container = Container.For<ConsoleRegistry>();
var app = container.GetInstance<Application>();
app.Run();
Console.ReadLine();
}