在我的数据层中:
public interface IMyDataContext
{
IMyRepository MyRepository { get ; set ; }
// other repo's
}
public class MyDataContext : IMyDataContext
{
public MyDataContext ( string connectionKey)
{
ConnectionKey = connectionKey;
Database = new Database(ConnectionKey);
MyRepository = new MyRepository (ConnectionKey);
// other repo's
}
}
在我的Web API服务层中:
在UnityConfig类中配置如此的统一:
_container = new UnityContainer();
_container.AddNewExtension<Interception>();
_container.RegisterType< IMyDataContext , MyDataContext >(
new ContainerControlledLifetimeManager(),
new Interceptor<InterfaceInterceptor >(),
new InjectionConstructor("MyConnectionKey" )
);
我希望将审核行为添加到MyRepository接口,类似这样,
_container.RegisterType< IMyRespository, MyRepository >(
new Interceptor<InterfaceInterceptor >(),
new InterceptionBehavior<AuditingInterceptionBehaviour >()
);
如果我这样做的话,永远不会调用 AuditingInterceptionBehaviour 。让它在该repo上调用的唯一方法是在我的web api控制器的构造函数中解析(下面),但认为这不是解决它的最佳方法,并且在UnityConfig类中依赖于自动解析。
public MyController( IMyDataContext datacontext)
{
_datacontext = datacontext;
_datacontext.MyRepository = UnityConfig.Instance.Resolve<IMyRespository> (new ParameterOverride("connectionKey", _datacontext.ConnectionKey));
}
如果我将行为添加到IMyDataContext的注册中,那么 AuditingInterceptionBehaviour 类会调用GET但我想获取调用存储库(在我的情况下是IMyRepository)而不是其父类的方法基本属性( IMyDataContext)。
这可以在我的UnityConfig课程中完成,还是我需要更多内容?
答案 0 :(得分:0)
以为我会在这个问题上发表我的答案:
基本上,只需要加载服务层统一容器并解析数据层中的repo而不是Web API服务层,如下所示:
public class MyDataContext : IMyDataContext
{
public MyDataContext ( string connectionKey)
{
ConnectionKey = connectionKey;
Database = new Database(ConnectionKey);
var container = new UnityContainer();
container.LoadConfiguration();
MyRepository = container.Resolve<IMyRespository>();
// resolve other repo's
}
}