【发布时间】:2016-04-27 00:17:41
【问题描述】:
所以问题是,当我声明时:
[Dependency]
public AuthenticationService _authenticationServices { get; set; }
_authenticationServices 将始终保持为null。它没有被引用,这将引发空引用异常。我假设问题源于我的 Unity 配置文件:
container.RegisterType<ICrudFactory, ZNodeDataContextFactory>();
container.RegisterType<ICrudFactory, MincronDataContextFactory>();
因为它们都使用相同的接口,但有一个单独的具体实现。实现如下:
public interface ICrud : IDisposable
{
// Method's to be exposed, via general repository.
}
public interface ICrudFactory
{
ICrud Create();
}
public ZNodeDataContext : DbContext, ICrud
{
// Concrete implementation.
}
public MincronDataContext : DbContext, ICrud
{
// Concrete implementation.
}
public ZNodeDataContextFactory : ICrudFactory
{
ICrud ICrudFactory.Create()
{
return ZNodeDataContext();
}
}
public MincronDataContextFactory : ICrudFactory
{
ICrud ICrudFactory.Create()
{
return MincronDataContext();
}
}
public class AuthenticationService
{
private readonly ICrudFactory _factory;
public AuthenticationService(ICrudFactory factory)
{
_factory = factory;
}
public void Sample()
{
using(var context = _factory.Create())
context.Method(...);
}
}
我想保持这种结构,以避免代码重复。
【问题讨论】:
-
AuthenticationService与工厂有什么关系? -
@YacoubMassad 已编辑以包含身份验证服务。
-
你要将
ICrudFactory的哪个实现注入AuthenticationService? -
好吧,我想做 ZNodeDataContext 但如果我需要另一个,请访问它。
-
为其添加默认注册,如下所示:
container.RegisterType<ICrudFactory, ZNodeDataContextFactory>();
标签: c# asp.net dependency-injection unity-container ioc-container