【发布时间】:2016-07-25 04:11:23
【问题描述】:
我正在尝试让 Unity Container Dependency Injection 在自托管的 owin 应用程序上工作。我已将 Unity nuget 包添加到我的项目中,并按如下方式设置了我的 UnityConfig 类:
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);
}
}
然后,我像这样设置我的控制器:
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);
}
}
在我的 Startup 类的 Configuration() 方法结束时调用 UnityConfig.RegisterComponents() 方法(在设置所有中间件之后)。当我访问这个控制器的 URL 时,总是调用无参数构造函数,因此 IUserRepository 的实例永远不会被解析。
我是否缺少某种配置模式?任何信息都非常感谢。
【问题讨论】:
-
尝试删除默认构造函数
-
如果我得到一个“无默认构造函数”异常
-
尝试将其设为私有
-
您确定您设置的
DependencyResolver正确吗?看看这个:damienbod.com/2013/10/01/self-host-webapi-with-owin-and-unity -
将默认构造函数设为私有没有任何区别(它仍然会被调用。我知道是因为其中的 Console.WriteLine() 语句正在执行。
标签: c# asp.net-web-api dependency-injection unity-container