0

我有一个简单的 mvc 应用程序,它有 3 层

  1. Ui => 引用了 Common And Services
  2. 常见的
  3. 服务 => 引用了 Common

我在公共层定义我的服务合同并在服务层实现它

//Common layer
public interface IPersonService
{
  void Foo();
}
//Services layer
public classPersonService:IPersonService
{
  void Foo()
  {
    //To DO
  }
}

在我的 Global.asax 中,我为初始 Structuremap 容器编写了这段代码

 ObjectFactory.Initialize(x =>
        {
            x.Scan(scan =>
            {
                scan.TheCallingAssembly();
                scan.WithDefaultConventions();
            });
        }

现在,当我想像这样从 IPersonService 获取实例时,在我的控制器中

var personService= ObjectFactory.GetInstance<IPersonService>();

我收到这个错误

没有注册默认实例,无法自动确定类型“*.IPersonService”

有解决这个问题的想法吗?

4

1 回答 1

1

AssembliesFromApplicationBaseDirectory()您可以使用该函数指定要扫描的其他程序集,如下所示:

scan.AssembliesFromApplicationBaseDirectory(a => a.FullName.StartsWith("YourNamespace.Common"));
scan.AssembliesFromApplicationBaseDirectory(a => a.FullName.StartsWith("YourNamespace.Services"));

看到您将此问题标记为 StructureMap 3 问题,我建议您不要使用,ObjectFactory因为 Jeremy Miller(StructureMap 的作者)已明确表示它将在未来版本中删除。事实上,您应该会收到一条警告,指出它将在未来的版本中删除。

相反,您应该像这样配置您的容器:

IContainer container = new Container();
container.Configure(c => {
    c.IncludeRegistry<YourRegistry>();
});

DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));

您可以在此处阅读有关 StructureMap 注册表的更多信息。

于 2015-01-28T13:09:58.597 回答