【发布时间】:2016-10-22 19:55:06
【问题描述】:
我是 asp.net core 的新手。
我要做的是构建多项目解决方案并使用依赖注入在项目之间传递接口。
我所知道的是,在 ASP.NET 核心项目中,我们在 startup.cs 文件中有 ConfigureServices 方法来注册我们的接口及其实现,如下所示:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddTransient<IMyInterface,MyImplementation>();
.....
}
如果您的课程都在同一个项目中,这很好,但是如果我有多个项目呢?
通常我要做的是使用安装程序(Windsor 安装程序)创建单独的项目来注册所需的接口及其实现。
在 .net 核心中,我们可以通过创建静态 ServiceCollection(); 并从中获取静态 IServiceProvider 来随时使用它来获取您注册的任何服务:
public static IServiceCollection _serviceCollection { get; private set; }
public static IServiceProvider serviceProvider { get; private set; }
public static RegisterationMethod() {
_serviceCollection = new ServiceCollection();
_serviceCollection.AddSingleton<IMyInterface,MyImplementation>();
.....
serviceProvider = _serviceCollection.BuildServiceProvider();
}
public T GetService<T>() where T : class
{
return serviceProvider.GetService<T>();
}
现在我们从 ower 启动项目中调用RegisterationMethod 并继续照常开发,始终在此类中注册服务。
这种方法的问题是,如果我在 ASP.NET 核心项目中使用它,我将有两个地方来注册服务,这个和 startup.cs 文件中的一个具有 ConfigureServices(IServiceCollection services) 。
你可能会说,
好的,将
ConfigureServices(IServiceCollection services)中的IServiceCollection传递给您之前创建的RegisterationMethod,这样您就可以使用与 ASP.NET 相同的服务集合。
但是通过这种方式,我将与.net core 的依赖注入模块紧密耦合。
有没有更干净的方法来做到这一点?或者我应该用 Windsor 替换默认 DI 吗?
【问题讨论】:
标签: dependency-injection asp.net-core castle-windsor .net-core