2012-06-21 79 views
0

我使用結構映射到解決contructors注射這樣StructureMap和方法注射

public class MyClass 
{ 
    private readonly IDependency _dependency; 

    public MyClass(IDependency dependency) 
    { 
     _dependency = dependency; 
    } 
// my methods 
} 

而且我有一些類相關性:IDependency

和StructureMap配置我有

public static IContainer Initialize() 
     { 
      ObjectFactory.Initialize(x => 
      { 
       x.For<IDependency>().Use<Dependency>(); 
      }); 
      return ObjectFactory.Container; 
     } 

一切workf精細

但在其他控制器我需要做的方法仁濟ction

public ActionResult(IDependency dependency) 
{ 
    dependency.DoSomething(); 
} 

我想有依存變量我的相關性類

+0

你能解釋爲什麼你認爲你需要注射的方法? – Steven

+0

我只需要在一種方法中使用依賴關係 – Bohdan

+1

我明白,但這無濟於事。我懷疑你的設計有什麼問題,並希望能幫助你,但需要更多的上下文。你能展示更多的代碼嗎?例如當你注射這個時顯示。 – Steven

回答

0

通常你會IDependency在構造注入(或一個setter),並將其分配給私有類成員,你就可以使用在你的方法中。

private readonly IDependency _dependency; 

public MyClass(IDependency dep) 
{ 
    this._dependency = dep; 
} 

public ActionResult MyAction() 
{ 
    _dependency.DoSomething(); 
} 
0

@戴夫我同意你的答案,但考慮到MyClass的是,在StructureMap共享/辛格爾頓範圍註冊。在這種情況下,如果我將dep注入到MyClass中,這意味着我在應用程序的整個生命週期中持有對dep對象的引用。聽起來像內存流失給我。

我最近進入了相同的情況,最終確定將StructureMap的IContainer注入到構造函數中(而不是所有其他無意義的對象),並在需要時使用它來獲取對象。

private readonly IContainer _container; 

public MyClass(IContainer con) 
{ 
    this._container = con; 
} 

public ActionResult MyAction() 
{ 
    var _dependency = _container.GetInstance<IDependency>(); 
    _dependency.DoSomething(); 
} 

這樣我注入的對象變成作用域爲MyAction()方法,並準備好通過GC消耗