[英]Autofac - passing a value inside a .OnActivated Method at the Resolve time
[英]Autofac passing properties to resolve
我發現了如何使用屬性注冊類。 但是如何使用運行時屬性做同樣的事情?
builder.RegisterType<ClientProfile>()
.WithProperty("Photos", new List<Photo>())
.InstancePerLifetimeScope();
像這樣:
var a = AutofacHostFactory.Container
.Resolve<ClientProfile>(
new NamedProperty ("id", user.Id),
new NamedProperty ("UserName", user.UserName));
我認為您必須擴展架構。 您要的是:一個類如何知道“當前用戶”?
好了,您需要定義Autofac提供用戶的方式。
例如,您可以定義一個接口IUserService:
public interface IUserService
{
User GetCurrentUser();
User GetUser(String id);
}
然后通過UserService實施它(如果您確實願意,也可以跳過接口定義)。 例如,該實現可以找到當前用戶在讀取db,身份驗證cookie,app.config或適合您的情況的任何內容。
然后,照常將UserService注冊為IUserService。
現在,您可以定義IUserService類型的構造函數屬性,並從中調用GetCurrentUser()。
或者,您可以直接注冊用戶類型:
builder.Register<User>(c => c.Resolve<IUserService>().GetCurrentUser());
現在,您只需要組件中的一個User即可從那里訪問屬性。 YMMV,但是模式將是這樣:您需要以某種方式定義“ UserContext”。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.