C# unity能否将代码注入到非';t控制器?
我有一个.net核心应用程序,它使用如下启动方式:C# unity能否将代码注入到非';t控制器?,c#,dependency-injection,C#,Dependency Injection,我有一个.net核心应用程序,它使用如下启动方式: public void ConfigureContainer(IUnityContainer container) { container.RegisterInstance(typeof(ILogger), "log", _Log); } 然后我开始我的程序.cs,如下所示: public class Program { public static void Main(str
public void ConfigureContainer(IUnityContainer container)
{
container.RegisterInstance(typeof(ILogger), "log", _Log);
}
然后我开始我的程序.cs,如下所示:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUnityServiceProvider()
.UseStartup<Startup>();
}
如果我在这个解决方案中有另一个.net核心项目用作类库,我可以自动将我的记录器插入到另一个项目的类中吗?我可以对使用注册接口实现的nuget包执行同样的操作吗? 我有几十个类库需要记录器,但我不想在任何地方都用新的上下文创建这些记录器。我宁愿在入口点从web应用程序传入我的单个记录器,或者让Unity为我旋转它们
我原以为dotnet核心类库可以使用它们自己的启动文件,但当我尝试从Program.cs文件调用它们时,它们从未被调用。请注意,我没有使用.Net标准类库,因为我的类库需要经常使用HttpContext,所以它们使用.Net Core。您所说的“自动”是什么意思?您必须提供类型为
ILogger
(构造函数注入)的构造函数参数或公共可设置属性(对于较少见的属性注入情况)。可能inject是错误的词。如果可能的话,我只想以某种方式获取记录器。“我能自动将记录器注入到其他项目的类中吗?”您真的尝试过这个吗?应该是开箱即用的。如果没有,请发布一个最小的、可复制的示例来演示问题。@Kit当您使用属性注入时,是否必须显式设置属性?或者您只是在某种统一方法中提供属性的名称来“注册”属性的值吗?
public class QuestionController : ControllerBase
{
private readonly ILogger _Log;
private readonly IServiceProvider _ServiceProvider;
public QuestionController(IServiceProvider serviceProvider, ILogger log)
{
_ServiceProvider = serviceProvider;
_Log = log; // this works and does what I want.
}