簡體   English   中英

我如何在ASP.NET-MVC中使用從Structuremap自動注冊?

[英]How can I use from Structuremap auto register in asp.net-mvc?

我有一個簡單的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'

有解決這個問題的主意嗎?

您可以使用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注冊表的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM