[英]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>();
現在,在解決的時候,我們可以分配給解決DBContext
的conncetionstring
的價值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.