1
我目前正在使用StructureMap設置ASP.Net核心架構。我的層是:StructureMap:自我註冊實現的層接口
- API(REST-連接,控制器,安全等)
- 邏輯(應用層與邏輯)
- 數據訪問(Repository模式與DocumentDB工作)
- 模型
- 常見
我想不跳層,因此他們之間的知識:
- 阿比知道邏輯,型號,普通
- 邏輯知道數據訪問,型號,普通
- 數據訪問知道型號,普通
- 型號都知道沒有人
- 常見知道型號
我的問題:我通過Scan-Conventions註冊StructureMap:
internal static IServiceProvider ConfigureIoC(IServiceCollection services)
{
var container = new Container();
container.Configure(
config =>
{
config.Scan(
_ =>
{
_.AssembliesFromApplicationBaseDirectory();
_.AddAllTypesOf(typeof(IRepository<>));
_.WithDefaultConventions();
});
config.Populate(services);
});
var result = container.GetInstance<IServiceProvider>();
return result;
}
我的問題,我想註冊一些服務在DataAccess層作爲單身人士。但是由於API不知道任何事情,所以我不能在這裏說。 我通常的做法是創建一個標記接口,通過反射加載所有的人,並呼籲他們,例如:
public class ServiceRegistration : Common.ServiceProviding.Initialization.IRegisterServices
{
public void RegisterServices(IServiceCollection serviceCollection)
{
serviceCollection.AddScoped<Logics.Integration.Rest.IRestProxy, Rest.Implementation.RestProxy>();
}
}
我找不到一些現成的可能性StructureMap,但由於它們已經增加了掃描裝配等功能,我想我錯過了一些功能,這可能會使這項工作,或者有其他的可能性?
非常感謝爲您掃描的掃描方法所有登記冊,這似乎是要走的路。最後一個問題:似乎在另一個註冊表中使用Scan並不是開箱即用,是不是某種已知的限制? –
不太確定我理解這個問題。 「使用其他註冊表掃描」是什麼意思? – Robban
在原始解決方案中,我直接在創建容器的位置使用掃描,如我的文章所示。但是當我在我的自定義註冊表中做同樣的事情時,它並沒有註冊IRepository實現,儘管它是完全相同的代碼。唯一不同的是,它現在從我的自定義註冊表掃描。 –