AutoFac使用總結

2021-07-04 22:40:27 字數 2547 閱讀 6990

註冊部分

使用registertype進行註冊

[csharp] view plaincopy

[fact]  

public void can_resolve_myclass()  

註冊為介面

[csharp] view plaincopy

[fact]  

public void register_as_inte***ce()  

使用lambda表示式進行註冊

[csharp] view plaincopy

[fact]  

public void can_register_with_lambda()  

帶構造引數的註冊

[csharp] view plaincopy

[fact]  

public void register_with_parameter()  

帶屬性賦值的註冊

[csharp] view plaincopy

[fact]  

public void register_with_property()  

);  

icontainer container = builder.build();  

var myclass = container.resolve();  

assert.notnull(myclass);  

assert.notnull(myclass.property);  

}  autofac分離了類的建立和使用,這樣可以根據輸入引數(namedparameter)動態的選擇實現類。

[csharp] view plaincopy

[fact]  

public void select_an_implementer_based_on_parameter_value()  

else  

}).as();  

icontainer container = builder.build();  

var repository = container.resolve(new namedparameter("type", "test"));  

assert.equal(typeof(testrepository),repository.gettype());  

}  aufofac也可以用乙個例項來註冊,比如用在單例模式情況下:

[csharp] view plaincopy

[fact]  

public void register_with_instance()  

註冊open generic型別

[csharp] view plaincopy

[fact]  

public void register_open_generic()  

對於同乙個介面,後面註冊的實現會覆蓋之前的實現

[csharp] view plaincopy

[fact]  

public void register_order()  

如果不想覆蓋的話,可以用preserveexistingdefaults,這樣會保留原來註冊的實現。

[csharp] view plaincopy

[fact]  

public void register_order_defaults()  

可以用name來區分不同的實現,代替as方法

[csharp] view plaincopy

[fact]  

public void register_with_name()  

如果乙個類有多個建構函式的話,可以在註冊時候選擇不同的建構函式

[csharp] view plaincopy

[fact]  

public void choose_constructors()  

autofac可以註冊乙個assemble下所有的類,當然,也可以根據型別進行篩選

[csharp] view plaincopy

[fact]  

public void register_assembly()  

{  var builder = new containerbuilder();  

builder.registerassemblytypes(assembly.getexecutingassembly()).  

where(t => t.name.endswith("repository")).  

a******mentedinte***ces();  

icontainer container = builder.build();  

var repository = container.resolve();  

assert.notnull(repository);  

注:如果你要想實現autofac的自動屬性注入,在屬性所在的class中,也要註冊到autofac中,獲取屬性所在的class的例項必須通過autofac獲取,也就是絕對不要通過new來獲取,因為autofac的存在就是為了讓你在一定程度上減少new的使用。

AutoFac使用方法總結 Part I

autofac是.net平台下的ioc容器產品,它可以管理類之間的複雜的依賴關係。在使用方面主要是register和resolve兩類操作。這篇文章用單元測試的形式列舉了autofac的常用使用方法 使用registertype進行註冊 123 4567 8910 fact public void ...

AutoFac使用方法總結 Part II

autofac支援三種事件 onactivating,onactivated,onrelease。onactivating在註冊元件使用之前會被呼叫,此時可以替換實現類或者進行一些其他的初始化工作,onactivated在例項化之後會被呼叫,onrelease在元件釋放之後會被呼叫。123 4567...

AutoFac使用方法總結 Part III

autofac中的生命週期概念非常重要,autofac也提供了強大的生命週期管理的能力。autofac定義了三種生命週期 per dependency single instance per lifetime scope per dependency為預設的生命週期,也被稱為 transient 或...