2011-02-28 41 views
0

所以我有線了在StructureMap我開的通用插件,像這樣StructureMap錯誤解決開放式泛型依賴

scan.ConnectImplementationsToTypesClosing(typeof(IRepository<>)); 

但還是得到PluginFamily KharaSoft.Utils定義的可怕

沒有默認實例.IRepository`1 [[KharaSoft.App.Core.DomainObject,KharaSoft.App.Core,版本= 1.0.0.0,文化=中性公鑰=空]

本人調試後容器被初始化,看到它確實有一個RepositoryBase實例,它已經註冊了,所以它知道我想要做什麼,但是它不會爲我關閉它。有什麼我在這裏失蹤?

+0

實例更仔細地觀察,它看起來是不是出於某種原因撿實際類型。在插件系列下,IRepository <>的FullName被列爲空。 – 2011-02-28 09:02:05

回答

0

所以我不確定這是否是「最好」的方式,但這是我發現的作品。我必須明確註冊開放實現插件的是這樣的:

ObjectFactory.Initialize(
    x => 
    { 
     x.Scan(scan => 
     { 
      scan.Assembly(typeof (IRepository<>).Assembly); 
      scan.WithDefaultConventions(); 
     }); 
     x.For(typeof (IRepository<>)).Use(typeof (RepositoryBase<>)); 
     x.For<IUnitOfWork>().Use<MyDataContext>(); 
    }); 
return ObjectFactory.Container; 

見我不想直接關閉通用於所有情況。所以,現在我的MVC控制器可以像這樣

public PlayerController(IRepository<Player> players) 
{ 
    Players = players; 
} 

而且StructureMap的依賴將關閉依存性的RepositoryBase

1

沒有看到完整的掃描碼或您的項目佈局,很難鍛鍊。我遇到這個問題時,通常會經歷幾個默認步驟。

確保您有

scan.WithDefaultConventions() 

確保包含庫類的組件包括在掃描:

x.AssemblyContainingType(typeof(UserRepository)); 

確保您有正確的實施到位:

IRepository<User> 

已匹配

Repository<User> 

希望通過此建議可以幫助您找到問題。

+0

我想我可能已經...現在測試出解決方案。 – 2011-02-28 20:18:23