2014-10-06 102 views
1

我想如果我做這樣的註冊一些開放仿製藥城堡溫莎註冊開仿製藥

它的工作原理

Component 
    .For(typeof(IDtoFactory<>)) 
    .ImplementedBy(typeof(DtoFactoryBase<>)) 
    .LifestyleSingleton() 

但是,如果我嘗試這樣的註冊失敗

Classes 
    .FromThisAssembly() 
    .BasedOn(typeof(IDtoFactory<>)) 
    .WithServiceAllInterfaces() 
    .LifestyleSingleton() 

我真的不介意有一個抽象基類,使這項工作,但它是一個有點痛但是我很樂意與所有的工廠只是實現該接口。

我得到像下面這樣

Service 'MyProj.Factories.IDtoFactory`1 
[[MyProject.Models.MemberDto, 
    MyProject, 
    Version=2.0.0.1, 
    Culture=neutral, 
    PublicKeyToken=null]]' which was not registered. 

錯誤我使用的是最新版本的溫莎城堡的〜3.3

我做什麼毛病我Classes註冊一個開放的通用?


所以這是非常令人沮喪

我去打造it not working here一個例子,它的工作第一次,沒有任何問題。我得看看我在工作中的執行情況,因爲顯然存在一些差異。

+0

你可能包括未能解決一個工作的例子嗎? – samy 2014-10-07 07:07:45

+0

@samy - 做,我只是想通了幾分鐘前 - 我的其他登記數量遠過於籠統和搞砸了我以前的註冊 – Neil 2014-10-07 10:59:00

+0

好吧,我想我們應該關閉此爲「不reproductible」然後。接得好! :D – samy 2014-10-07 11:03:23

回答

0

我在這裏找到了我的問題。在我的生產環境中,我在不同的安裝程序中使用了以下內容:

Classes 
    .FromThisAssembly() 
    .Where(type => 
     type.Name.EndsWith("Wrapper") || 
     type.Name.EndsWith("Provider") || 
     type.Name.EndsWith("Factory") || 
     type.Name.EndsWith("Reader") || 
     type.Name.EndsWith("Writer") || 
     type.Name.EndsWith("Destroyer") || 
     type.Name.EndsWith("Helper") 
    ) 
    .WithService 
    .DefaultInterfaces() 
    .Configure(c => c.LifeStyle.Is(scope)) 

這是搞亂了我的其他安裝程序。一旦我刪除,並與東西取代了登記的更明確的一切都開始在這裏工作正常

github

+0

我無法在GitHub上找到您所做的更改。 – 2014-10-07 16:43:45

+0

我會作爲一個下降的測試以及顯示問題 – Neil 2014-10-07 16:49:04

0

是否有任何機會的錯誤是不IDtoFactory本身的註冊,但它和你的Dto`s之間的聯繫?你能粘貼更多的代碼嗎?爲了查看實際發生的情況,從屬性中暴露您的容器(爲了測試),並查看組件註冊。您將清楚地看到是否有任何錯誤配置的組件 - 容器本身就有這樣的屬性。