gpt4 book ai didi

c# - 统一: Cannot register type from different assembly

转载 作者:太空狗 更新时间:2023-10-29 20:00:07 27 4
gpt4 key购买 nike

我正在尝试在我的 MVC 应用程序中实现 Dependency injection。我正在为 IoC 使用 Unity.Mvc3.dll。我只是想知道 Unity 如何无法从另一个程序集中注册类型。这是代码:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);

var container = new UnityContainer();

// ok: register type from this assembly
container.RegisterType<IMessages, Messages>();

// fail: register type from another assembly (service reference)
container.RegisterType<IPlayerService, PlayerService>();

DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}

public class UnityDependencyResolver : IDependencyResolver
{
private readonly IUnityContainer _container;

public UnityDependencyResolver(IUnityContainer container)
{
this._container = container;
}

public object GetService(Type serviceType)
{
try
{
return _container.Resolve(serviceType);
}
catch (Exception ex)
{
throw ex;
}
}

public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _container.ResolveAll(serviceType);
}
catch (Exception ex)
{
throw ex;
}
}
}

在 MVC Controller 中的用法:

[Dependency]
public IPlayerService PlayerService { get; set; }

[Dependency]
public IMessages Messages { get; set; }


public ActionResult Index()
{
PlayerMessageViewModel vm = new PlayerMessageViewModel();
vm.Messages = Messages; // success!
vm.Players = PlayerService.Get(); // fail: null reference exception :PlayerService

return View(vm);
}

PlayerService 在 Messages 正常时始终为 null。

这是 PlayerService

public class PlayerService : IPlayerService
{
private readonly MyDbEntities _dbContext;

public PlayerService()
{
_dbContext = new MyDbEntities();
}

public PlayerService(MyDbEntities dbContext)
{
_dbContext = dbContext;
}


public IQueryable<Player> Get()
{
return _dbContext.Players.AsQueryable();
}
}

这是完整的错误信息

Resolution of the dependency failed, type = "System.Web.Mvc.IControllerFactory", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, System.Web.Mvc.IControllerFactory, is an interface and cannot be constructed. Are you missing a type mapping?

最佳答案

默认情况下,unity 会选择参数最多的构造函数,所以我认为它会尝试使用第二个构造函数和 dbContext 参数,它无法解析。如果您使用属性 [InjectionConstructor] 标记您的默认构造函数,那么希望这将解决您的问题

关于c# - 统一: Cannot register type from different assembly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com