con*_*att 5 asp.net dependency-injection .net-core asp.net-core
我的 ASP.NET Core v2 项目的 Startup.cs 类中有以下方法。我的问题是如何设置一个类/服务,其中一个字符串值被传递给一个类,以及一个注入的依赖项。
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add custom services.
services.AddSingleton<IMyAssistantClass, MyAssistantClass);
services.AddSingleton<MyClassManager>(s => new MyClassManager("connectionString", /* How to inject IMyAssistantClass? */);
// Other setup....
}
Run Code Online (Sandbox Code Playgroud)
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMyAssistantClass, MyAssistantClass);
services.AddSingleton<MyClassManager>(s =>
{
var imy = (IMyAssistantClass) s.GetService(typeof(IMyAssistantClass))
new MyClassManager("connectionString", imy);
}
);
}
Run Code Online (Sandbox Code Playgroud)
// 使它更方便的好方法是添加扩展方法IServiceCollection,例如
public static T Resolve<T>(this IServiceProvider serviceProvider)
{
return (T) serviceProvider.GetService(typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话 s.Resolve<IMyAssistantClass>();
将变量提升connectionString为参数对象并将该对象注册到容器中:
public class MyClassManagerSettings
{
public readonly string ConnectionString;
public MyClassManagerSettings(string connectionString) {
this.ConnectionString = connectionString
?? throw new ArgumentNullException(nameof(connectionString));
}
}
public class MyClassManager
{
public MyClassManager(
MyClassManagerSettings settings, IMyAssistantClass assistant)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式注册:
services.AddSingleton<IMyAssistantClass, MyAssistantClass);
services.AddSingleton<MyClassManager>();
services.AddSingleton(new MyClassManagerSettings("myConnectionString"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |