使用CallingAssembly或AssemblyFromApplicationBaseDirectory和WithD



今天,我一直在尝试在Windows控制台应用程序中设置structureMap 3.1.0.133版本的最简单用法。

我很难让WithDefaultConventions方法像我认为的那样工作。我有一个实现IMember接口的Member类。StructureMap使用显式cfg.For<>..Use<>按预期注册Member具体类,但在设置.WithDefaultConventions时,我一定遗漏了一些内容。

    private void Init()
    {
        ObjectFactory.Initialize(cfg =>
        {
            cfg.Scan(scan =>
            {
                //scan.AssembliesFromApplicationBaseDirectory();
                scan.TheCallingAssembly();
                // named assembly not found ?
                //scan.Assembly("myApp");
                scan.WithDefaultConventions();
            });
            //cfg.For<IMember>().Use<Member>();
     }

没有。对于<>,这条线导致错误

IMember member = ObjectFactory.GetInstance<IMember>();

如何让StructureMap"查看"调用程序集并执行基于约定的注册?

尝试使用AppDomain.CurrentDomain.GetAssemblies()查看当前加载的程序集是否包含"MyApp"

你也可以试试这个:

  1. 将类库项目添加到解决方案中("模型")
  2. 移动您的"IMember"one_answers"Member"(并从控制台项目中删除)
  3. 在控制台项目中添加对"Models"的引用
  4. 然后使用

scan.Assembly("Models");

在初始化例程中。

这是一个应用程序结构,可能更接近于您在生产中使用的结构。

希望这能帮助。。。

此外,请确保在引用程序集名称的字符串中不使用扩展名

最新更新