Unity-如何使用基本类型注册类型
|
我有一个基类和一些派生类。基类包含需要注入的属性。如何配置Unity以构建对象?
public class BaseService<T> where T : class
{
public T Entity { get; private set; }
[Dependency]
public IUnitOfWork UnitOfWork { get; private set; }
public BaseService(T obj)
{
this.Entity = obj;
}
}
public class ContactService : BaseService<Contact>
{
public ContactService(Contact obj) : base(obj)
{
}
public bool IsValid()
{
bool result = false;
// ...
return result;
}
public void AddContact()
{
if (!IsValid()) { throw new InvalidEntityException<Contact>(); }
try
{
this.UnitOfWork.BeginTransaction();
this.UnitOfWork.Add<Contact>(this.Entity);
this.UnitOfWork.CommitTransaction();
}
catch
{
this.UnitOfWork.RollbackTransaction();
}
}
}
我该如何首先注册它,然后如何解决ContactService,因为它有一个带有无法注入参数的构造函数?我是否应该为此使用Unity?
没有找到相关结果
已邀请:
2 个回复
校勒魏寡
有了这种基本模式,Unity可以利用其所有依赖关系来构建您的服务,而您不会遇到注入联系人的问题。该存储库可以用作抽象,也可以直接使用您喜欢的数据访问框架,例如EF,NHibernate或普通的旧Ado.Net(如果这样做)。 由于try catch的内容是重复的,因此可以使用扩展方法来压缩代码,如下所示:
扩展方法如下所示:
有关此内容的更多信息:http://www.agileatwork.com/refactoring-c-style/ 以这种方式构造代码的最大好处是,您可以利用Unity的拦截机制并做很多很酷的事情,例如将工作单元代码移动到一个方面(属性):
您可以使用类似的技术来添加其他行为,例如日志记录,异常处理和安全性。
素汞读