2010-04-08 51 views
3

我使用Unity與MVC和NHibernate。不幸的是,我們的UnitOfWork駐留在一個不同的.dll中,它沒有默認的空的.ctor。 這是我做登記的NHibernate:Microsoft Unity,構造函數中的參數

var connectionString = ConfigurationManager.ConnectionStrings 
    ["jobManagerConnection"].ConnectionString; 
var assemblyMap = ConfigurationManager.AppSettings["assemblyMap"]; 
container.RegisterType<IUnitOfWork, UnitOfWork>(
    new ContainerControlledLifetimeManager()); 

在我WebController我有這樣的:

/// <summary>Gets or sets UnitOfWork.</summary> 
[Dependency] 
public IUnitOfWork UnitOfWork { get; set; } 

的問題是的UnitOfWork的構造函數需要2個強制性的字符串。我如何設置此接口的RegisterType以傳遞從web.config中retreived的兩個參數? 這可能嗎?

回答

1

更容易比我還以爲:

 var connectionString = ConfigurationManager.ConnectionStrings["jobManagerConnection"].ConnectionString; 
     var assemblyMap = ConfigurationManager.AppSettings["assemblyMap"]; 
     container 
      .RegisterType<IUnitOfWork, UnitOfWork>(new ContainerControlledLifetimeManager()) 
      .Configure<InjectedMembers>() 
      .ConfigureInjectionFor<UnitOfWork>(new InjectionConstructor(connectionString, assemblyMap)); 
+0

由於某些原因,我無法獲得構造函數參數的Mark語法,但是您的更長實現工作。謝謝! – Dave 2010-05-20 17:38:33

4

像這樣的東西應該這樣做:

var connectionString = ConfigurationManager.ConnectionStrings 
    ["jobManagerConnection"].ConnectionString; 
var assemblyMap = ConfigurationManager.AppSettings["assemblyMap"]; 

container.RegisterType<IUnitOfWork, UnitOfWork>(
    new InjectionConstructor(connectionString, assemblyMap), 
    new ContainerControlledLifetimeManager()); 
+0

是的,馬克,你是對的。我剛剛發佈了另一種方式。 對不起,但Unity中的文檔仍然不足。 – Raffaeu 2010-04-08 12:43:50

+1

馬克拿到了它差不多吧 - 你需要先把壽命經理: container.RegisterInstance ( 新ContainerControlledLifetimeManager(), 新InjectionConstructor(的connectionString,assembyMap)); – 2010-08-23 05:09:54