[英]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.