2016-03-01 67 views
3

我幾乎想要做什麼這傢伙描述(傳遞依賴到自定義屬性):如何使用StructureMap(4.0)將依賴項注入到自定義屬性中? MVC5項目

How to use dependency injection with an attribute?

不過,我想與StructureMap 4.0,不Ninject去做。

我的項目是建立在我的Data Layer DLL中的自定義屬性,和我已經有StructureMap在我UI Layer安裝和工作與我的控制器。

我已經決定,我可能必須做二傳手注射StructureMap:

http://docs.structuremap.net/ConstructorAndSetterInjection.htm

但是,沒有正確與數據層我的自定義屬性爲我工作。

我計算過,爲了使事情的工作,我應該安裝Structuremap到我的數據層爲好,把這個IoC.cs:

 public static IContainer Initialize() 
    { 
     Container container = new Container(x => 
     { 

      x.ForConcreteType<My_AuthorizeADAttribute>().Configure.Setter<My_AppDataContext>().IsTheDefault(); //not sure about this line 
     }); 

     return container; 
    } 

哦..我的自定義屬性:

public class My_AuthorizeADAttribute : AuthorizeAttribute 
{ 
    public IMy_Data_Context _dataContext; 

    [SetterProperty] 
    public IMy_Data_Context DataContext 
    { 
     get { return _dataContext; } 
     set { _dataContext = value; } 
    } 

這是正確的做法嗎?我想我離開了一步。 (但後來我還沒有真正在同一個項目中的多個dll上設置Structuremap,想知道是否有多個具有StructureMap的項目需要更多的東西

目前,應用程序將運行,但自定義屬性將不填充

更新:這個StackOverflow的問題是有幫助的:

How do I get StructureMap working with an AngularJs/MVC5 and WebApi2 web project

回答

0

這實在是不能確定的行

x.ForConcreteType<My_AuthorizeADAttribute>().Configure.Setter<My_AppDataContext>().IsTheDefault(); //not sure about this line 

這應該不是指定你真的想注入的setter的實例,像這樣的內容:

x.ForConcreteType<My_AuthorizeADAttribute>().Configure.SetterDependency<IMy_Data_Context>().Is(new My_AppDataContext()); 

這將注入你的具體落實IMy_Data_ContextMy_AppDataContext,代入式My_AuthorizeADAttribute。如果您的屬性中有IMy_Data_Context類型的多個屬性,則可能需要擔心如何使用您正在處理的默認語法來分配多個默認值,但似乎並不是您的用例。

+0

hmmm ..SetterDependency沒有出現。 (這不是一個選項)。有沒有我需要的參考? – Kevin

+0

好吧,我假設將.SetterDependency改爲.Setter是恰當的術語,因爲對4.0代碼的審查不會在任何地方顯示.SetterDependency。他們的新文檔也在這裏: http://structuremap.github.io/setter-injection/ 不幸的是,它仍然無法正常工作。在每個dll中都有一個IoC.cs文件,以設置多個項目的正確方式? – Kevin

0

我在StructureMap Gitter room回覆了你,但我也會在這裏做。您創建後是否針對您的屬性對象調用Container.BuildUp(object)? StructureMap不是在運行時建立屬性對象,它只能在之後應用setter。有關BuildUp()的更多信息,請參閱本文的底部部分:http://structuremap.github.io/setter-injection/

相關問題