簡體   English   中英

如何在autofac中傳遞有關解析時間的參數

[英]how to pass parameters on resolve time in autofac

我在 autofac 中寫了以下寄存器類型:

 builder.RegisterType<NoteBookContext>()
        .As<DbContext>()
        .WithParameter(ResolvedParameter.ForNamed<DbContext>("connectionstring"));

實際上,我編寫此代碼是為了使用 connectionstring 參數注入 NoteBookContext。 (即: new NoteBookContext(string connectionstring)

現在,如何在運行時傳遞參數值?

WithParameter方法具有接受動態實例化委托的重載。

第一個參數是選擇要設置的參數的謂詞,而第二個參數是參數值提供程序:

builder.RegisterType<NoteBookContext>()
       .As<DbContext>()
       .WithParameter((pi, c) => pi.Name == "connectionstring", 
                      (pi, c) => c.Resolve<IConnectionStringProvider>().ConnectionString);

有關更多詳細信息,請參閱Autofac文檔中的傳遞參數以注冊

為了在解析時傳遞連接字符串值,我們首先需要將構造函數的委托傳遞給Register方法,然后將帶有NamedParameter的連接字符串的值傳遞給Resolve方法。

例如:

ContainerBuilder builder = new ContainerBuilder();

builder.Register((pi, c) => new NoteBookContext(pi.Named<string>("connectionstring")))
            .As<DbContext>();

現在,在解決的時候,我們可以分配給解決DBContextconncetionstring的價值Consts.MyConnectionString

IContainer container = builder.Build();

NoteBookContext noteBookContext = container.Resolve<DbContext>(
    new NamedParameter(
        "connectionstring", Consts.MyConnectionString
    )
);

如果你只是快速傳遞一些東西,你不需要做很多/任何特別的事情,對我來說,我能夠傳遞一個我想要注入的實例。

container.Resolve<IFoo>(new List<Parameter>{ new TypedParameter(something.GetType(), something)});

注意:我知道我傳入的內容沒有在容器中注冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM