2017-06-26 32 views
0

我有下面的類:註冊爲智力KeyFilter與autofac

public class A 
{ 
    private string name; 
    private int id; 

    public A([KeyFilter("name")] string name, [KeyFilter("id")] int id) 
    { 
     this.name = name; 
     this.id = id; 
    } 
} 

我想用autofac注入的依賴關係。這兩個參數都將從配置文件中獲取。 這裏是我的代碼來初始化類。

public IContainer Initialize() 
{ 
    ContainerBuilder builder = new ContainerBuilder(); 
    string name = ConfigurationManager.AppSettings["Name"]; 
    builder.RegisterInstance(name).Keyed<string>("name"); 
    int id = int.Parse(ConfigurationManager.AppSettings["Id"]); 
    builder.RegisterInstance(id).Keyed<int>("id"); 

    builder.RegisterType<A>().WithAttributeFiltering(); 
    return builder.Build(); 
} 

上面的代碼不編譯由於錯誤「int類型必須是爲了用它作爲參數T引用類型...」。 我意識到,我需要另一種機制注入整數。我試過其他功能從生成器,甚至autofac文檔中做了一個研究沒有運氣。這裏

一個解決辦法是期待一個字符串ID(而不是INT ID)的注入作爲串並最終解析它的A類裏面,但我不喜歡這樣的解決方案那麼多。 有什麼建議嗎?

回答

1

可以使用Register方法採取lambda函數:

int id = int.Parse(ConfigurationManager.AppSettings["Id"]); 
builder.Register(c => id).Keyed<int>("id"); 

RegisterInstance方法具有class約束,因爲這種方法旨在共享可與struct做一個對象的同一個實例。關於爲什麼你不能註冊struct實例的詳細信息,請參閱Cannot register a struct instance with autofac

+0

謝謝,這樣做的伎倆。我讀了另一篇文章,並理解爲什麼我不能註冊一個結構。 – afonte