C# 如何注册使用Simple Injector接口的具体对象?
在以下代码中,C# 如何注册使用Simple Injector接口的具体对象?,c#,dependency-injection,simple-injector,C#,Dependency Injection,Simple Injector,在以下代码中,HomeController接收一个ValueObject,其状态someValue在数据库中经常更改。在构造函数中检索状态 如何使用IHomeController在容器中注册HomeController,以便在访问HomeController时,创建新的ValueObject,并更新其状态 public class HomeController() { public HomeController(ValueObject value) { } } publ
HomeController
接收一个ValueObject
,其状态someValue
在数据库中经常更改。在构造函数中检索状态
如何使用IHomeController
在容器中注册HomeController
,以便在访问HomeController
时,创建新的ValueObject
,并更新其状态
public class HomeController()
{
public HomeController(ValueObject value)
{
}
}
public class ValueObject()
{
public someValues { get; private set; }
public ValueObject(IValueRepository repository)
{
// The someValue changes very often in the system
someValue = repository.GetSomeValues();
}
}
这应该起作用:
container.Register<HomeController>();
container.Register<ValueObject>();
container.Register<IValueRepository, SqlValueRepository>();
这样的装饰器允许您在HomeController
中不再需要ValueObject
,其外观如下所示:
public class HomeController
{
public HomeController(IValueRepository repository)
{
}
}
container.Register<HomeController>();
container.Register<IValueRepository, SqlValueRepository>();
container.RegisterDecorator<IValueRepository, CachingValueRepositoryDecorator>();
可按以下方式进行注册:
public class HomeController
{
public HomeController(IValueRepository repository)
{
}
}
container.Register<HomeController>();
container.Register<IValueRepository, SqlValueRepository>();
container.RegisterDecorator<IValueRepository, CachingValueRepositoryDecorator>();
container.Register();
container.Register();
container.RegisterDecorator();
这应该可以:
container.Register<HomeController>();
container.Register<ValueObject>();
container.Register<IValueRepository, SqlValueRepository>();
这样的装饰器允许您在HomeController
中不再需要ValueObject
,其外观如下所示:
public class HomeController
{
public HomeController(IValueRepository repository)
{
}
}
container.Register<HomeController>();
container.Register<IValueRepository, SqlValueRepository>();
container.RegisterDecorator<IValueRepository, CachingValueRepositoryDecorator>();
可按以下方式进行注册:
public class HomeController
{
public HomeController(IValueRepository repository)
{
}
}
container.Register<HomeController>();
container.Register<IValueRepository, SqlValueRepository>();
container.RegisterDecorator<IValueRepository, CachingValueRepositoryDecorator>();
container.Register();
container.Register();
container.RegisterDecorator();
更新您的示例。代码段不反映问题的内容。您不需要IHomeController
。您需要使用适当的DI容器,并使用生存期PerRequest
注册ValueObject
和ValueRepository
。这将为每个请求创建它们的新实例,对它们执行方法将为每个请求获得新状态。我还建议让HomeController依赖于存储库,并让存储库返回ValueObject
的对象。更新您的示例。代码段不反映问题的内容。您不需要IHomeController
。您需要使用适当的DI容器,并使用生存期PerRequest
注册ValueObject
和ValueRepository
。这将为每个请求创建它们的新实例,对它们执行方法将为每个请求获得新状态。我还建议HomeController依赖于存储库,并让存储库返回ValueObject
的对象。