[英]How can I use Dependency Injection in a .Net Core ActionFilterAttribute?
[英]How can I use dependency injection without changing/adding constructors
我有以下asp.net C#代碼
{
public class Test
{
ISomeService _someService;
public Test()
{
}
public void DoSomething()
{
_someService.Do();
}
}
我需要向Test類提供ISomeService,但我不知道該怎么做。 例如,我不允許添加其他構造,這會使整個問題消失
public Test(ISomeService someService)
{
_someService = someService;
}
我嘗試使用setter注入或方法注入,但是沒有成功。
SomeService類中ISomeService的實現也使用構造函數注入,例如
public SomeService(IService1 service1, Iservice2 service2)
不知道在這里做什么。
這是完整的代碼
public class Startup
{
private IService _service;
public Startup()
{
}
public Startup(IService service)
{
_service = service;
}
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
var container = new UnityContainer();
container.RegisterType<IService, Service>();
config.DependencyResolver = new UnityDependencyResolver(container);
app.UseWebApi(config);
_service.DoSomething());
}
}
_service為空
我建議您使用工廠創建對象。 那將在構造函數上注入一個ISomeService實例。
然后,在工廠的CreateTest()方法中直接設置ISomeService屬性。
public class Factory
{
private readonly ISomeService someService;
public Factory(ISomeService someService)
{
this.someService = someService ?? throw new ArgumentNullException(nameof(someService));
}
public TestClass CreateTestClass()
{
var instance = new TestClass();
instance.SomeService = this.someService;
return instance;
}
}
您應該注意,大多數DI提供程序都內置了允許工廠語義的功能,而無需創建自己的工廠。
我最終要做的是這個
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IService, Service>();
// create service provider
var serviceProvider = serviceCollection.BuildServiceProvider();
_service = ActivatorUtilities.CreateInstance<Service>(serviceProvider);
_service.DoSomething();
感謝這個答案依賴注入與控制器類以外的其他類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.