簡體   English   中英

自動將接口注冊到autofac中的類

[英]Automatically register interface to class in autofac

我正在研究的項目,每個類都有其自己的接口,並具有以下命名約定

ClassA.cs:IClassA.cs

ClassB.cs:IClassB.cs等

目前在Autofac的引導程序中,我反復輸入

builder.RegisterType<ClassA>.As<IClassA>();
builder.RegisterType<ClassB>.As<IClassB>();

有一些單身人士可以很好地衡量。

有什么辦法可以使綁定過程自動化? 我知道手動添加綁定不是很多額外的工作,但是隨着時間的推移,這會變得更糟。

我的容器中目前有以下物品

builder.RegisterType<MyClass>().As<IMyClass>().SingleInstance();

var myAss = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(myAss)
   .Where(t => t.IsClass )
   .As(t => t.GetInterfaces().Single(i => 
   ( i.Name.Length == t.Name.Length + 1 ) && 
   ( i.Name == "I" + t.Name)));

但是,請在監視窗口中查看生成器。 好像它已經兩次注冊Myclass。 現在我可能在這里是完全錯誤的,因為我一生都無法通過監視窗口找到在builder中實際注冊的內容。

如果我錯了,請給我一巴掌。

但是,請在監視窗口中查看生成器。 好像它已經兩次注冊Myclass。

是的,這是正確的,因為您正在將類MyClass手動注冊為單例(第一行),並且第二次在RegisterAssemblyTypes調用中RegisterAssemblyTypes

我認為以這種方式注冊所有類的風險很大,因為每次您擁有一個沒有實現接口的類時,或者如果該接口不遵循您的命名約定,該操作都會失敗。 做類似的事情

builder.RegisterAssemblyTypes(myAss)
   .Where(t => t.Name.EndsWith("Repository"))
   .AsImplementedInterfaces();

Autofac文檔中所示,可能會更強大。 如果只想注冊所有課程,則可以跳過Where部分。

暫無
暫無

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

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