如何在Using语句中创建一个包装所有EF存储库调用的类,同时还支持存储库的可注入接口?
我无法理解这个类支持2种不同类型的实例化。
pool.map
本质上,“db”的生命周期。 object是方法调用的生命周期。然而,' db'如果注入,将在课外管理。
答案 0 :(得分:2)
你可以用这种方式构建它:
#! /bin/bash
## create an example command to launch for demonstration purposes
function mycommand { D=$(date) ; while true ; do echo $D; sleep 1s ; done; }
while true
do
mycommand & PID=$!
sleep 6m
kill $PID ; wait $PID 2>/dev/null
done
您需要一种将public class MyClass
{
private readonly IRepo _repo;
//or if you want a parameterless constructor...
public MyClass() : this(new Repo()) { }
public MyClass(IRepo repo)
{
_repo = repo;
}
public MyObject MyMethod(int id)
{
_repo.GetById(id);
}
}
public interface IRepo
{
MyObject GetById(int id);
}
public class Repo : IRepo
{
public MyObject GetById(int id)
{
using ( var db = new DbContext())
{
//do your db related stuff here
}
}
}
的实例注入Repo
的方法,所以可以看看IoC。
这样,您可以轻松地模拟MyClass
以进行测试。
答案 1 :(得分:0)
你不应该这样做。拥有Repo
的无参数构造函数,并在那里实例化DbContext
。您也可能需要DbContext
的超载,但您不必这样做。关键是让每一层都只担心它自己需要什么。让IOC容器在创建时注入所有内容,不要为方法中的不同层创建对象。