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