C# Unity DI在DI中不工作-改为调用默认控制器构造函数
我试图让Unity容器依赖注入在一个自托管的owin应用程序上工作。我已将Unity nuget包添加到我的项目中,并按如下方式设置了UnityConfig类:C# Unity DI在DI中不工作-改为调用默认控制器构造函数,c#,asp.net-web-api,dependency-injection,unity-container,C#,Asp.net Web Api,Dependency Injection,Unity Container,我试图让Unity容器依赖注入在一个自托管的owin应用程序上工作。我已将Unity nuget包添加到我的项目中,并按如下方式设置了UnityConfig类: public static class UnityConfig { public static void RegisterComponents() { var container = new UnityContainer(); // register all your component
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
// register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>();
container.RegisterType<IDBContext,UniversalCoatingsDbContext>();
container.RegisterType<IUserRepository,UserRepository>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
公共静态类UnityConfig
{
公共静态无效注册表组件()
{
var container=new UnityContainer();
//在此处向容器注册所有组件
//无需注册控制器
//例如container.RegisterType();
container.RegisterType();
container.RegisterType();
GlobalConfiguration.Configuration.DependencyResolver=新的UnityDependencyResolver(容器);
}
}
然后,我将控制器设置为:
public class UserController : ApiController
{
private IUserRepository userRepo;
public UserController() {
Console.WriteLine("User controller default constructor");
}
//dependency injected value
public UserController(IUserRepository repo)
{
this.userRepo = repo;
Console.WriteLine("DI enabled constructor");
}
[HttpPost]
public JsonResult<MessageResponse> Register(UnhashedUser unhashed_user)
{
MessageResponse response = new MessageResponse();
if(ModelState.IsValid)
{
response = userRepo.createUser(unhashed_user);
}
else
{
response.message = "Invalid Request sent.";
}
return Json(response);
}
}
公共类用户控制器:ApiController
{
私人IUSERREPO;
公共用户控制器(){
Console.WriteLine(“用户控制器默认构造函数”);
}
//依赖注入值
公共用户控制器(IUserRepository repo)
{
this.userRepo=repo;
Console.WriteLine(“启用DI的构造函数”);
}
[HttpPost]
公共JsonResult寄存器(UnhashedUser unhashed_用户)
{
MessageResponse=newmessageresponse();
if(ModelState.IsValid)
{
response=userRepo.createUser(unhashed_user);
}
其他的
{
response.message=“发送的请求无效。”;
}
返回Json(响应);
}
}
UnityConfig.RegisterComponents()方法在我的Startup类的Configuration()方法的末尾被调用(在所有中间件都设置好之后)。当我访问这个控制器的URL时,总是调用无参数构造函数,因此永远不会解析IUserRepository的实例
我是否缺少某种配置模式?非常感谢您提供的任何信息。我修改了UnityConfig类,将容器作为静态变量公开。然后呢, 我将此添加到我的startup类中:
//set up dependency injection
UnityConfig.RegisterComponents();
config.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(UnityConfig.container);
app.UseWebApi(config);
尝试删除默认构造函数如果我得到一个“无默认构造函数”例外以使其私有化是否确实设置了正确的
依赖解析程序
?看看这个:将默认构造函数设为私有并没有什么区别(它仍然会被调用。我知道,因为它中的Console.WriteLine()语句正在执行。